我使用以下代码将stderr发送到文件。
.script >2 "errorlog.$(date)"
问题是每次运行脚本时都会创建一个空白日志文件,即使错误不存在也是如此。我已经在线阅读了几本书,并且只有在出现错误时才能弄清楚如何创建日志文件。
答案 0 :(得分:5)
输出重定向在脚本运行之前打开文件,因此无法判断文件是否会接收任何输出。但是,如果文件结束为空,则可以立即删除该文件:
logfile="errorlog.$(date)"
# Note your typo; it's 2>, not >2
script 2> "$logfile"; [ -s "$logfile" ] || rm -f "$logfile"
我使用-f
以防万一,-s
如果$logfile
不存在则会失败,而不仅仅是;
。我使用$logfile
来分隔命令,因为script
是否包含任何内容并不取决于save_log () {
logfile=${1:-errorlog.$(date)}
cat - > "$logfile"
[ -s "$logfile" ] || rm -f "$logfile"
}
script 2> >( save_log )
script 2> >( save_log my_logfile.txt )
是否成功。
您可以将其包装在一个函数中,以便于使用。
{{1}}
不像重定向到文件那么简单,并且取决于非标准功能(进程替换),但也不是太糟糕。