在Shell脚本或命令行中,标准错误输出(stderr)通常与标准输出(stdout)分开处理,其文件描述符是2
。当我们需要将程序的错误信息重定向到一个文件、另一个命令的标准输入,或者合并到标准输出时,可以使用以下几种方式:
重定向到文件:
command 2> error.log
将命令执行过程中的所有错误信息重定向到error.log
文件,如果文件不存在则会被创建,原有的内容会被覆盖。
追加到文件:
command 2>> error.log
类似于上面的方式,但是这里的操作是追加(append),即错误信息会被添加到error.log
文件的末尾。
与标准输出合并:
command > output.log 2>&1
首先将标准输出重定向至output.log
文件,然后通过2>&1
将标准错误输出重定向到标准输出所指向的地方(这里是output.log
),因此,标准输出和错误输出都被写入同一个文件。
错误输出重定向至标准输出:
command &> output.log
在某些现代shell(如bash)中,可以简写为单个操作符,这会同时重定向标准错误和标准输出到同一文件。
丢弃错误输出:
command 2>/dev/null
如果不想看到命令产生的任何错误信息,可以把错误输出重定向到/dev/null
,这是一个特殊的设备文件,它会忽略所有的写入数据。
错误输出与标准输出绑定在一起并重定向:
command &> log.txt
或者command > log.txt 2>&1
这两种形式都可以确保标准输出和错误输出都写入同一个日志文件log.txt
中。
总结来说,在Shell中,对标准错误输出进行重定向的关键在于正确地使用文件描述符及其对应的重定向符号,例如 >
、>>
和 &>
,以及 2>
和 2>&1
等组合。