我正在尝试更好地记录我没有编写的测试程序。我希望 STDERR 输出的所有行都有时间戳,但如果可能的话我想保留 STDOUT。我还想要一个文件(all.txt)来记录stdout和stderr(带或不带STDERR时间戳),以及一个专用于STDERR输出的文件(errors.txt,带时间戳)
还,我不在乎终端是否回显任何内容。这是一个批处理式的程序。
我确实查看了 rsyslog,这可能会在稍后出现,但这是一个我应该能够真正快速破解的解决方案......至少,如果我了解更多有关输出重定向的信息。我读过很多类似的问题,但显然与这种具体情况无关。
我认为为了将时间戳添加到 stderr 输出,我想使用管道和这个问题中的技术:https://serverfault.com/questions/310098/adding-a-timestamp-to-bash-script-log
这里最干净的解决方案是什么?请注意,我的 RHEL5 系统运行的是 bash 3.2.25。
+----stdout-------------------+
/ \
test.pl --+ +--> all.txt
\ /
+----stderr | add_timestamps -+----> errors.txt
答案1
我认为这会做你想要的:
test.pl 2>&1 >all.txt | add_timestamps | tee -a all.txt > errors.txt
- 将 stderr 重定向到 stdout(以便我们稍后可以通过管道传输)
- 将(原始)标准输出重定向到
all.txt
- 通过管道 stdout(现在包含错误消息)到
add_timestamps
- 用于
tee
将错误(带时间戳)附加到all.txt
- 最后,还将错误写入
errors.txt