加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

将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 )

不像重定向到文件那么简单,并且取决于非标准功能(进程替换),但也不是太糟糕.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读