echo>&2“some text”在shell脚本中是什么意思

6uxekuva  于 2023-04-07  发布在  Shell
关注(0)|答案(5)|浏览(146)

我在很多地方都看到过echo这样使用:

echo >&2 message text ...

这是什么意思?
我理解2>&1,但是,我不知道如何解释上面的用法。
有人能解释一下吗?

33qvvth1

33qvvth11#

简单解释一下其他人错过了什么:
echo "hey" >&2
>重定向标准输出(隐式1>
&接下来是文件描述符,而不是文件(仅适用于>的右侧)
2标准错误文件描述符编号
stdoutecho命令重定向到stderr。(如果使用echo "hey" >2,则会将hey输出到名为2的文件中)

w41d8nur

w41d8nur2#

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

aor9mmx1

aor9mmx13#

虽然其他答案给予了很好的解释,但他们忽略了这里提出的“确切问题”。最好的答案是直接对问题进行评论的形式,但唉,Stack Overflow不认为我值得被允许添加评论。
引用Tripleee的话:
命令行中重定向的previse [sic]位置并不重要。所有>&2 echo messageecho >&2 messageecho message >&2都是等效的。
这正是我来寻找的问题,目前没有任何答案回答这个问题;他们只是解释了我已经知道的事情。另一方面,这个问题可以从更好的措辞中受益,但同样,我被禁止评论,所以...

x7rlezfr

x7rlezfr4#

>&2重定向是1>& 2的快捷方式。
您理解2>& 1,因此您将理解这将命令的 stdout 链接到当前的 stderr
关于shell重定向语法的脚注...
这看起来像
{numfd}[operator]{whitespace}[target]
其中{...}部分是可选的。为了可读性,建议在操作符和目标之间使用空格,但这不是必需的。另一方面,如果在操作符前面包含{numfd},则两者之间不能有任何空格。
[operator]可以是文件目标的<>>>和文件描述符目标的<&>&之一。
对于<{numfd}默认为0;对于>>>,默认为1。
[target]是一个文件名,除非operator以&结尾。在这种情况下,它被解释为数字文件描述符。

mum43rcc

mum43rcc5#

command > /yourfile等于command 1> /yourfile
因此>&21>& 2将stdout重定向到stderr相同

相关问题