BASH将时间戳添加到stdout和stderr

时间:2019-12-01 07:21:39

标签: bash process timestamp stdout stderr

我正在为stdout和stderr中的所有行添加时间戳。但是,我不想将它们中的任何一个重定向到文件。进程管理器(pm2)正在脚本中运行此命令,然后它将stdout和stderr记录到它们各自的文件中。我正在尝试修改流(不合并它们)并在pm2记录之前插入时间戳。我可以让他们两个都孤立地工作,但是遇到修改两者的问题。感谢您提供的任何帮助。

这是我的工作代码

python3.6 ./bot.py > >(gawk '{ print strftime("[%Y-%m-%d %H:%M:%S]"), $0 }') 2> >(gawk '{ print strftime("[%Y-%m-%d %H:%M:%S]"), $0 }')

1 个答案:

答案 0 :(得分:1)

您需要将第二个gawk命令的输出重定向回stderr:

python3.6 ./bot.py \
    > >(gawk '{ print strftime("[%Y-%m-%d %H:%M:%S]"), $0 }') \
   2> >(gawk '{ print strftime("[%Y-%m-%d %H:%M:%S]"), $0 }' >&2)
#                                             this part here ^^^

否则,第二条gawk命令将从python3.6的stderr接收输入,但是将输出发送到与其他所有命令相同的stdout。