echo>&2“一些文本”在shell脚本中是什么意思


72

echo在很多地方都看到过这样的用法:

echo >&2 message text ...

这是什么意思?

我了解2>&1,但是我不确定如何解释上述用法。

谁能解释一下?


11
命令行中重定向的预定位置并不重要。所有>&2 echo messageecho >&2 messageecho message >&2都是等效的。
2014年

1
如果找到所需的解释,别忘了接受答案。
Jite 2015年

1
作为扩展到什么@tripleee在谈论,做到注意,echo hey >/dev/null 2>&1并且echo hey 2>&1 >/dev/null一样的东西。重定向从左到右的顺序进行。
Jite

Answers:


133

为了快速解释其他人错过的事情:

echo "hey" >&2

>重定向标准输出(隐式1>

&接下来是文件描述符,而不是文件(仅适用于的右侧>

2 stderr文件描述符号

stdoutecho命令重定向到stderr。(如果要使用echo "hey" >2,则会输出hey到名为的文件中2


1
优秀答案。现在,即使./someScript.sh 2>&1也有意义!谢谢!
hba

28

使用>&2此处会将输出发送到标准错误,而不是标准输出。通常,这是发送不是计算实际结果的日志记录输出的更好的地方,尤其是如果结果打印到标准输出(可能重定向到文件)而不是其他文件输出(即,将日志记录发送到)标准错误可确保它不会包含在重定向到输出文件的实际输出中)。


8

>&2重定向是一条捷径1>& 2

您了解了,2>& 1因此您将了解这会将命令的标准输出链接到当前的标准错误


6

尽管其他答案给出了很好的解释,但它们都缺少此处提出的确切问题。最好的答案是直接对问题发表评论,但可惜,Stack Overflow认为我不值得被添加评论。

因此,引用三元组

所述预段[原文如此在命令行重定向的]位置并不重要。所有>&2 echo messageecho >&2 messageecho message >&2都是等效的。

这是我要寻找的确切问题,目前没有答案可以回答。他们只是解释我已经知道的事情。另一方面,可以从更好的措词中获益,但是我再次被禁止评论,所以...


3
然后我再次补充说,以上对于一种重定向是正确的。假设stdout和stderr指向tty,那么1>/dev/null 2>&12>&1 1>/dev/null不是同一回事。前者既重定向stdoutstderr/dev/null哪里,因为后者重定向stderr到任何stdout指着在时间(TTY),然后重定向stdout/dev/null,从而导致所有stderr的输出仍然会到终端。
杰特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.