我使用以下代码将stderr发送到一个文件。
.script >2 "errorlog.$(date)"问题是我每次运行脚本时都会创建一个空白日志文件,即使不存在错误也是如此。我在网上看过,也看过几本书,我想不出只有在出现错误的情况下才能创建日志文件。
发布于 2013-07-11 01:08:58
输出重定向在脚本运行之前打开文件,因此无法判断文件是否会收到任何输出。但是,如果文件为空,您可以立即删除该文件:
logfile="errorlog.$(date)"
# Note your typo; it's 2>, not >2
script 2> "$logfile"; [ -s "$logfile" ] || rm -f "$logfile"我使用-f只是为了以防万一,因为如果$logfile不存在,而不仅仅是它为空,-s可能会失败。我使用;来分隔命令,因为$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 )这并不像重定向到文件那么简单,而且依赖于非标准特性(进程替换),但也不是太糟糕。
https://stackoverflow.com/questions/17576468
复制相似问题