我在很多地方都看到过echo这样使用:
echo
echo >&2 message text ...
这是什么意思?我理解2>&1,但是,我不知道如何解释上面的用法。有人能解释一下吗?
2>&1
33qvvth11#
简单解释一下其他人错过了什么:echo "hey" >&2>重定向标准输出(隐式1>)&接下来是文件描述符,而不是文件(仅适用于>的右侧)2标准错误文件描述符编号将stdout从echo命令重定向到stderr。(如果使用echo "hey" >2,则会将hey输出到名为2的文件中)
echo "hey" >&2
>
1>
&
2
stdout
stderr
echo "hey" >2
hey
w41d8nur2#
这里使用>&2是将输出发送到标准错误而不是标准输出。这通常是发送不是实际计算结果的日志输出的更好地方。特别是如果结果打印为标准输出(可能重定向到一个文件),而不是其他一些文件输出(即,将日志发送到标准错误确保它不会包含在重定向到输出文件的真实的输出中)。
>&2
aor9mmx13#
虽然其他答案给予了很好的解释,但他们忽略了这里提出的“确切问题”。最好的答案是直接对问题进行评论的形式,但唉,Stack Overflow不认为我值得被允许添加评论。引用Tripleee的话:命令行中重定向的previse [sic]位置并不重要。所有>&2 echo message和echo >&2 message和echo message >&2都是等效的。这正是我来寻找的问题,目前没有任何答案回答这个问题;他们只是解释了我已经知道的事情。另一方面,这个问题可以从更好的措辞中受益,但同样,我被禁止评论,所以...
>&2 echo message
echo >&2 message
echo message >&2
x7rlezfr4#
>&2重定向是1>& 2的快捷方式。您理解2>& 1,因此您将理解这将命令的 stdout 链接到当前的 stderr关于shell重定向语法的脚注...这看起来像{numfd}[operator]{whitespace}[target]其中{...}部分是可选的。为了可读性,建议在操作符和目标之间使用空格,但这不是必需的。另一方面,如果在操作符前面包含{numfd},则两者之间不能有任何空格。[operator]可以是文件目标的<、>、>>和文件描述符目标的<&、>&之一。对于<,{numfd}默认为0;对于>和>>,默认为1。[target]是一个文件名,除非operator以&结尾。在这种情况下,它被解释为数字文件描述符。
1>& 2
2>& 1
{numfd}[operator]{whitespace}[target]
{...}
{numfd}
[operator]
<
>>
<&
>&
[target]
mum43rcc5#
command > /yourfile等于command 1> /yourfile因此>&2与1>& 2将stdout重定向到stderr相同
command > /yourfile
command 1> /yourfile
5条答案
按热度按时间33qvvth11#
简单解释一下其他人错过了什么:
echo "hey" >&2
>
重定向标准输出(隐式1>
)&
接下来是文件描述符,而不是文件(仅适用于>
的右侧)2
标准错误文件描述符编号将
stdout
从echo
命令重定向到stderr
。(如果使用echo "hey" >2
,则会将hey
输出到名为2
的文件中)w41d8nur2#
这里使用
>&2
是将输出发送到标准错误而不是标准输出。这通常是发送不是实际计算结果的日志输出的更好地方。特别是如果结果打印为标准输出(可能重定向到一个文件),而不是其他一些文件输出(即,将日志发送到标准错误确保它不会包含在重定向到输出文件的真实的输出中)。aor9mmx13#
虽然其他答案给予了很好的解释,但他们忽略了这里提出的“确切问题”。最好的答案是直接对问题进行评论的形式,但唉,Stack Overflow不认为我值得被允许添加评论。
引用Tripleee的话:
命令行中重定向的previse [sic]位置并不重要。所有
>&2 echo message
和echo >&2 message
和echo message >&2
都是等效的。这正是我来寻找的问题,目前没有任何答案回答这个问题;他们只是解释了我已经知道的事情。另一方面,这个问题可以从更好的措辞中受益,但同样,我被禁止评论,所以...
x7rlezfr4#
>&2
重定向是1>& 2
的快捷方式。您理解
2>& 1
,因此您将理解这将命令的 stdout 链接到当前的 stderr关于shell重定向语法的脚注...
这看起来像
{numfd}[operator]{whitespace}[target]
其中
{...}
部分是可选的。为了可读性,建议在操作符和目标之间使用空格,但这不是必需的。另一方面,如果在操作符前面包含{numfd}
,则两者之间不能有任何空格。[operator]
可以是文件目标的<
、>
、>>
和文件描述符目标的<&
、>&
之一。对于
<
,{numfd}
默认为0;对于>
和>>
,默认为1。[target]
是一个文件名,除非operator以&
结尾。在这种情况下,它被解释为数字文件描述符。mum43rcc5#
command > /yourfile
等于command 1> /yourfile
因此
>&2
与1>& 2
将stdout重定向到stderr相同