我正在编写一个 bash 脚本,需要将我运行的命令的输出stdout
和stderr
输出重定向到一个文件,相应地在每一行前面加上stderr
or stdout
。
有没有一种简单的方法可以做到这一点?
试试这个:
(myCommand | sed s/^/stdout:/ >> myLogfile) 2>&1 | sed s/^/stderr:/ >> myLogFile
第一个管道stdout:
向 的标准输出插入前缀myCommand
并将其附加到myLogFile
.
括号用于对所有这些进行单个命令。他们告诉我们进一步的重定向适用于括号内的内容,而sed
不仅仅是。
然后标准错误被重定向到标准输出2>&1
(记住原来的标准输出已经被重定向到了myLogFile
)。第二个管道为其插入一个stderr:
前缀并将其附加到myLogFile
.
来自Debian的devscripts的annotate-output就是这样做的。
其手册页中的示例:
$ 注释输出 21:41:21 我:开始制作 21:41:21 O: gcc -Wall program.c 21:43:18 E:program.c:无法编译,我花了很长时间才找到 21:43:19 E:collect2:ld 返回 1 个退出状态 21:43:19 E: make: *** [all] 错误 1 21:43:19 I:以退出代码 2 结束