将输出回送给stderr
是否有一个标准的Bash工具,其行为像回声,但输出到标准错误而不是标准输出?
我知道我可以做echo foo 1>&2
但它有点丑,我怀疑,容易出错(例如,当事情改变时更容易被编辑错误)。
这个问题很古老,但你可以做到这一点,这有利于阅读:
>&2 echo "error"
操作符>&2
字面意思是将文件描述符1( stdout
)的地址重定向到该命令1的文件描述符2( stderr
)的地址。 取决于你想了解它的深度,请阅读:http://wiki.bash-hackers.org/howto/redirect_tutorial
为了避免与其他重定向的交互使用subshell
(>&2 echo "error")
1 >&2
文件描述符# >&2
复制到文件描述符#1。 因此,执行此重定向后,两个文件描述符都会引用同一文件:一个文件描述符#2 最初指的是。
你可以定义一个函数:
echoerr() { echo "$@" 1>&2; }
echoerr hello world
这将比脚本更快并且没有依赖关系。
卡米洛马丁的bash特定建议使用“这里的字符串”,并将打印任何传递给它的信息,包括回声通常会吞下的参数(-n):
echoerr() { cat <<< "$@" 1>&2; }
格伦杰克曼的解决方案也避免了吞咽问题:
echoerr() { printf "%sn" "$*" >&2; }
由于1
是标准输出,所以您不必在输出重定向之前显式地将其命名为>
,而只需键入:
echo This message goes to stderr >&2
既然你似乎担心1>&2
将难以可靠地打字,那么消除冗余1
可能会对你有些微的鼓励!