是否有一个标准的 Bash 工具,它像 echo 一样输出到 stderr 而不是 stdout?
我知道我可以做echo foo 1>&2
但它有点难看,我怀疑,容易出错(例如,当事情发生变化时更有可能被编辑错误)。
这个问题很旧,但你可以做到这一点,这有助于阅读:
>&2 echo "error"
运算符>&2
字面意思是将文件描述符 1( stdout
)的地址重定向到该命令1 的文件描述符 2( stderr
)的地址。根据您想要了解它的深度,请阅读: http : //wiki.bash-hackers.org/howto/redirection_tutorial
为避免与其他重定向的交互,请使用 subshell
(>&2 echo "error")
1 >&2
文件描述符# >&2
复制到文件描述符#1。因此,在执行此重定向之后,两个文件描述符将引用相同的文件:一个文件描述符#2 最初是指。
你可以定义一个函数:
echoerr() { echo "$@" 1>&2; }
echoerr hello world
这比脚本更快,没有依赖性。
Camilo Martin 的 bash 特定建议使用 “here string” 并将打印传递给它的任何内容,包括 echo 通常会吞下的参数(-n):
echoerr() { cat <<< "$@" 1>&2; }
格伦杰克曼的解决方案也避免了吞咽问题:
echoerr() { printf "%s\n" "$*" >&2; }
由于1
是标准输出,因此您不必在输出重定向(如>
前面明确命名,而只需键入:
echo This message goes to stderr >&2
由于您似乎担心1>&2
将难以可靠地键入,因此消除冗余1
可能对您有点鼓励!