2>&1 的具体含义是什么?
问:
为了将 stderr 和 stdout 合并成 stdout 流,我们将它附加到命令中:
2>&1
例如,要查看编译 g++ main.cpp 的前几个错误:
g++ main.cpp 2>&1 | head
2>&1 的具体含义是什么?
答:
文件描述符 1 是标准输出(stdout)。
文件描述符 2 是标准错误(stderr)。
起初,2>1 看起来像是将 stderr 重定向到 stdout 的好方法。但是,它实际上会被解释为“将 stderr 重定向到名称为 1 的文件”。
& 表明其后面和前面的(数字)是文件描述符,而不是文件名。因此,我们使用 2>&1。考虑将 >& 作为重定向合并运算符。
相关知识点
在操作系统术语中,正在运行的程序被称为进程。Unix/Linux/POSIX(包括 Windows)环境中的每个进程都有三个不同的输入/输出文件描述符,分别是标准输入(stdin)、标准输出(stdout)和标准错误(stderr)。
● stdin 是程序的默认输入源--默认情况下,字符来自键盘。对应文件描述符数字 0。
● stdout 是发送程序输出的默认位置,默认情况下,输出出现在运行 shell 或 shell 脚本的窗口中。
● stderr 标准错误也可以从程序中发送到输出,但它只应该输出到程序中编写错误消息的地方。
shell 提供了一种机制,你可以让一个正在运行的程序在不修改程序本身的情况下更改它的输入位置和输出位置,这种技术就是重定向。
参考文档
- https://baijiahao.baidu.com/s?id=1791842199325996839&wfr=spider&for=pc
-
stackoverflow question 818255
-
《bash网络安全运维》