将stdout和stderr重定向到带有前缀的单个文件

时间:2010-03-12 12:07:50

标签: bash stdout redirect stderr

我正在编写一个bash脚本,需要将运行的命令的stdoutstderr输出重定向到单个文件,在每行前加stderr或{{1}因此。

有一种简单的方法吗?

2 个答案:

答案 0 :(得分:11)

来自annotate-outputDebian

devscripts就是这样做的。

其手册页中的示例:

$ annotate-output make
21:41:21 I: Started make
21:41:21 O: gcc -Wall program.c
21:43:18 E: program.c: Couldn't compile, and took me ages to find out
21:43:19 E: collect2: ld returned 1 exit status
21:43:19 E: make: *** [all] Error 1
21:43:19 I: Finished with exitcode 2

答案 1 :(得分:10)

试试这个:

(myCommand | sed s/^/stdout:/ >> myLogfile) 2>&1 | sed s/^/stderr:/ >> myLogFile

第一个管道在stdout:的标准输出中插入myCommand前缀,并将其附加到myLogFile

括号用于制作所有这些的单个命令。他们告诉我们,进一步的重定向适用于括号内的内容,而不适用于sed

然后标准错误被重定向到2>&1的标准输出(请记住,原始标准输出已被重定向到myLogFile)。第二个管道向其插入stderr:前缀,并将其附加到myLogFile