我正在我的机器上运行一个脚本,该脚本在运行时会产生大量输出。我将该输出重定向到,/dev/null
因为我对其内容不感兴趣,并且我捕获文件中的任何错误(因为我只关心脚本是否失败)。但是,文件中的错误不包含时间戳。
有没有办法将时间戳附加到 stderr 重定向?这是我的命令,但不知道如何添加时间戳:
myScript.sh 2>> logfile.txt 1>/dev/null
我无法修改 myScript.sh 来打印日期,因此这也不是一个选项。我尝试过这样的事情:
myScript.sh 2>> logfile.txt << date
但这行不通。
答案1
ts
frommoreutils
可用于向某些输出的每一行添加时间戳:
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)