我希望在shell脚本中执行的命令的所有错误都写在一个日志文件中,这是一个简单的执行过程
exec 2>> /var/log/mylog.txt
但是如果我想在每一行加上错误发生前的日期呢?
最佳答案
如果您使用的是bash
,则可以访问可能用于此目的的联合进程:
#!/bin/bash
# The co-process responsible to add the date
coproc myproc {
( bash -c 'while read line; do echo $(date): ${line}; done' 3>&1 1>&2- 2>&3- )
}
# Redirect stderr to the co-process
exec 2>&${myproc[1]}
# Here my script -- classical; no (visible) redirection
ls non-existant-file1 existant-file non-existant-file2
将上述内容另存为
t.sh
:sh$ touch existant-file
sh$ ./t.sh 2> error.log
existant-file
sh$ cat error.log
Tue Jul 15 00:15:29 CEST 2014: ls: cannot access non-existant-file1: No such file or directory
Tue Jul 15 00:15:29 CEST 2014: ls: cannot access non-existant-file2: No such file or directory