我可以用来2> errorLogFile
将正在运行的脚本的错误记录到文件中,对吗?我的问题是如何记录错误发生的日期和时间?
例如:
$ cat myScript
2> errorLogFile
..... # rest of the script
错误文件看起来应该是这样的:
$ cat errorLogFile
21 Nov 2015 2:00 PM some error happened
答案1
您可以重定向stderr
到进程替代,该进程替代会处理stderr
并将处理后的行输出到日志。
例如,此脚本将打印 5 行到stdout
和 5 行到stderr
,重定向stderr
到一个进程替换,该进程替换将处理stderr
并输出处理后的行到当前工作目录中名为“log”的文件(请注意,重定向的语法stderr
是exec 2> [...]
,而不是2> [...]
):
#!/bin/bash
exec 2> >(perl -pe '$x=`date "+%d %b %Y %H:%M %p"`;chomp($x);$_=$x." ".$_' >log)
for i in {1..5}; do
sleep 1
echo "STDOUT message #$i"
echo "STDERR message #$i" >&2
done
exit 0
过程替换调用 Perl,它将当前日期和时间以该格式附加到每一行,并将它们输出到当前工作目录中名为“log”的文件中。
% bash script.sh
STDOUT message #1
STDOUT message #2
STDOUT message #3
STDOUT message #4
STDOUT message #5
% cat log
02 Nov 2015 20:15 PM STDERR message #1
02 Nov 2015 20:15 PM STDERR message #2
02 Nov 2015 20:15 PM STDERR message #3
02 Nov 2015 20:15 PM STDERR message #4
02 Nov 2015 20:15 PM STDERR message #5