将bash stderr发送到logfile,但仅在存在错误时才发送
发布时间:2020-12-15 21:42:54 所属栏目:安全 来源:网络整理
导读:我使用以下代码将stderr发送到文件. .script 2 "errorlog.$(date)" 问题是每次运行脚本时都会创建一个空白日志文件,即使错误不存在也是如此.我也在网上和几本书中看过,并且只有在存在错误时才能弄清楚如何创建日志文件. 解决方法 输出重定向在脚本运行之前打
我使用以下代码将stderr发送到文件.
.script >2 "errorlog.$(date)" 问题是每次运行脚本时都会创建一个空白日志文件,即使错误不存在也是如此.我也在网上和几本书中看过,并且只有在存在错误时才能弄清楚如何创建日志文件. 解决方法
输出重定向在脚本运行之前打开文件,因此无法判断文件是否将接收任何输出.但是,如果文件结束为空,则可以立即删除该文件:
logfile="errorlog.$(date)" # Note your typo; it's 2>,not >2 script 2> "$logfile"; [ -s "$logfile" ] || rm -f "$logfile" 我使用-f以防万一,因为如果$logfile不存在,-s可能会失败,而不仅仅是它是空的.我用 ;分离命令,因为$logfile是否包含任何内容不依赖于脚本是否成功. 您可以将其包装在一个函数中,以便于使用. save_log () { logfile=${1:-errorlog.$(date)} cat - > "$logfile" [ -s "$logfile" ] || rm -f "$logfile" } script 2> >( save_log ) script 2> >( save_log my_logfile.txt ) 不像重定向到文件那么简单,并且取决于非标准功能(进程替换),但也不是太糟糕. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |