将输出回送给stderr

是否有一个标准的Bash工具,其行为像回声,但输出到标准错误而不是标准输出?

我知道我可以做echo foo 1>&2但它有点丑,我怀疑,容易出错(例如,当事情改变时更容易被编辑错误)。


这个问题很古老,但你可以做到这一点,这有利于阅读:

>&2 echo "error"

操作符>&2字面意思是将文件描述符1( stdout )的地址重定向到该命令1的文件描述符2( stderr )的地址。 取决于你想了解它的深度,请阅读:http://wiki.bash-hackers.org/howto/redirect_tutorial

为了避免与其他重定向的交互使用subshel​​l

(>&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可能会对你有些微的鼓励!

链接地址: http://www.djcxy.com/p/25701.html

上一篇: echo that outputs to stderr

下一篇: Using bash(cygwin) inside C# program