一尘不染

在shell中,“ 2>&1 ”是什么意思?

shell

在 Unix shell 中,如果我想合并stderrstdout进入stdout流以进行进一步操作,我可以在命令末尾附加以下内容:

2>&1

所以,如果我想head在 的输出上使用g++,我可以这样做:

g++ lots_of_errors 2>&1 | head

所以我只能看到前几个错误。

我总是很难记住这一点,而且我必须经常去查找它,这主要是因为我不完全理解这个特殊技巧的语法。

有人可以打破这个并逐字解释是什么2>&1 意思吗?


阅读 265

收藏
2022-01-27

共1个答案

一尘不染

文件描述符 1 是标准输出 ( stdout)。
文件描述符 2 是标准错误 ( stderr)。

这是记住这个结构的一种方法(尽管它并不完全准确):起初,2>1可能看起来像是重定向stderrstdout. 但是,它实际上会被解释为“重定向stderr到一个名为1”的文件。&表示后面和前面的是文件描述符而不是文件名。所以构造变成:2>&1.

考虑>&作为重定向合并运营商。

2022-01-27