将时间戳添加到 stderr 重定向

将时间戳添加到 stderr 重定向

我正在我的机器上运行一个脚本,该脚本在运行时会产生大量输出。我将该输出重定向到,/dev/null因为我对其内容不感兴趣,并且我捕获文件中的任何错误(因为我只关心脚本是否失败)。但是,文件中的错误不包含时间戳。

有没有办法将时间戳附加到 stderr 重定向?这是我的命令,但不知道如何添加时间戳:

myScript.sh 2>> logfile.txt 1>/dev/null

我无法修改 myScript.sh 来打印日期,因此这也不是一个选项。我尝试过这样的事情:

myScript.sh 2>> logfile.txt << date

但这行不通。

答案1

tsfrommoreutils可用于向某些输出的每一行添加时间戳:

myScript.sh 2>&1 > /dev/null | ts >> logfile.txt

您可以以类似格式指定时间戳格式strftime()

$ seq 4 | ts '%FT%.T%z:'
2023-06-06T14:11:15.244613+0100: 1
2023-06-06T14:11:15.244693+0100: 2
2023-06-06T14:11:15.244729+0100: 3
2023-06-06T14:11:15.244759+0100: 4

例如,具有微秒精度的 ISO8601 时间戳格式。

答案2

我也推荐ts。和一个输出流程替代适合这里:

myScript.sh 2> >(ts >> logfile.txt) 1>/dev/null
# ............^ yes that space is required.

答案3

您可以在脚本执行之前调用 print 日期,如下所示:

echo "$(date >> logfile.txt; ./myscript.sh 2>> logfile.txt 1>/dev/null)

相关内容