我希望在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

09-08 01:46