我在后台同时运行多个任务。
command_a | tee > command_a.log &
command_b | tee > command_b.log &
Run Code Online (Sandbox Code Playgroud)
如果一切正常,则消息将保存到日志文件中。
如果出现问题,它会在屏幕上打印错误。
但是command_a 和command_b 非常相似,很难分辨哪个错误信息是由哪个命令产生的。
我可以在错误消息中添加前缀字符串,例如:
command_a: error 123
command_b: error 456
command_a: error 256
command_a: error 555
command_b: error 333
Run Code Online (Sandbox Code Playgroud)
bash进程替换:
command_a 2> >(sed 's/^/command_a: /' >&2) > command_a.log &
command_b 2> >(sed 's/^/command_b: /' >&2) > command_b.log &
Run Code Online (Sandbox Code Playgroud)
tee如果您只是将其标准输出重定向到文件,则不需要管道。
你甚至可以做一些花哨的事情,比如打印时间戳:
$ {
date
echo stdout
sleep 3
echo stderr >&2
} 2> >(gawk '{print "foobar:", strftime("[%F %T]", systime()), $0}' >&2) > file.log
Run Code Online (Sandbox Code Playgroud)
foobar: [2015-02-24 11:43:32] stderr
Run Code Online (Sandbox Code Playgroud)
$ cat file.log
Run Code Online (Sandbox Code Playgroud)
Tue Feb 24 11:43:29 EST 2015
stdout
Run Code Online (Sandbox Code Playgroud)
将其粘贴到一个函数中以供重用:
log_stderr() {
gawk -v pref="$1" '{print pref":", strftime("%F %T", systime()), $0}' >&2
}
command_a > command_a.log 2> >(log_stderr "command_a")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2942 次 |
| 最近记录: |