这些命令之间有什么区别:
command 2>&1 > log
command > log 2>&1
command >& log
command > log 1>&2
第一个将错误输出到控制台,然后输出到日志。为什么不两者都不去日志?
第二个不产生任何输出,输出和错误在日志中。放在最后有什么区别2>&1
?
第三个和上一个一样。什么是捷径?
第四个将所有内容都放在控制台上,而没有放在日志中?
示例命令:ls -ld /tmp /xxx
这些在两篇 文章中得到了很好的解释。本质上,您必须从左到右读取重定向作为输出目标的副本。所以
command 2>&1 > log
log
。这些不是传递的,所以标准错误在命令运行时确实指向终端。
command > log 2>&1
log
。log
.这意味着标准输出和标准错误都记录到同一个文件中。
command >& log
将标准错误和标准输出都重定向到文件log
。这是前面命令的 Bash 语法糖。
command > log 1>&2
log
。重定向顺序在bash中很重要:
command 2>&1 > log
重定向stderr
到stdout
然后stdout
到日志文件。所以结果是stderr
进入屏幕(如果没有在更高级别上重定向)并stdout
进入文件。command > log 2>&1
重定向stdout
到文件,并stderr
重定向到文件句柄1
,即文件。command >&log
是前一种情况的快捷方式,即重定向stderr
到stdout
文件。command > log 1>&2
将stderr
(文件句柄 1)重定向到文件,然后将其重定向到stderr
. 所以结果stdout
会去stderr
。但是会出现一个零字节长的log
文件。这可以写成command >log >&2
。