在 Unix shell 中,如果我想合并stderr并stdout进入stdout流以进行进一步操作,我可以在命令末尾附加以下内容:
stderr
stdout
2>&1
所以,如果我想head在 的输出上使用g++,我可以这样做:
head
g++
g++ lots_of_errors 2>&1 | head
所以我只能看到前几个错误。
我总是很难记住这一点,而且我必须经常去查找它,这主要是因为我不完全理解这个特殊技巧的语法。
有人可以打破这个并逐字解释是什么2>&1 意思吗?
文件描述符 1 是标准输出 ( stdout)。 文件描述符 2 是标准错误 ( stderr)。
这是记住这个结构的一种方法(尽管它并不完全准确):起初,2>1可能看起来像是重定向stderr到stdout. 但是,它实际上会被解释为“重定向stderr到一个名为1”的文件。&表示后面和前面的是文件描述符而不是文件名。所以构造变成:2>&1.
2>1
1
&
考虑>&作为重定向合并运营商。
>&