bash的管道符与重定向
管道符“|”可以用来将前面的程序的标准输出stdout(=1)重定向到后一个程序的stdin(=0),但是忽略了stderr。
在bash中使用2>&1 可以表示将stderr重定向到stdout
使用下面命令可以将程序my的标准错误与标准输出附加到文件my.log的末尾
./my 2>&1 | tee -a my.log
自从bash v4版本开始可以用符号|& 来代替 2>&1 | ,因此上述命令还可以写为:
./my |& tee -a my.log
同时管道符使得我们不能够通过$?获取到my程序的退出状态码了。
上面的命令中将stdout/stderr重定向到了相同的文件,那么如何重定向到不同文件呢? 使用如下命令即可
exec > >(tee $ $STDOUTFILE) 2> >(tee $ $ERRFILE >&2)
解释:exec(shell内置命令,使用help exec查看说明) 重定向符号,将stdout的一份重定向到了STDOUTFILE文件中,后边将stderr重定向到ERRFILE中,并将tee的stdout重定向到stderr(tee能做的事情就是将接收的内容一份输出的stdout,一份输出到指定的文件)
参考
本文源自http://www.cnblogs.com/makefile/