我正在编写一个bash脚本,需要将运行的命令的stdout
和stderr
输出重定向到单个文件,在每行前加stderr
或{{1}因此。
有一种简单的方法吗?
答案 0 :(得分:11)
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
。