首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将bash stderr发送到日志文件,但仅当存在错误时

将bash stderr发送到日志文件,但仅当存在错误时
EN

Stack Overflow用户
提问于 2013-07-11 00:52:39
回答 1查看 1.7K关注 0票数 6

我使用以下代码将stderr发送到一个文件。

代码语言:javascript
运行
复制
.script >2 "errorlog.$(date)"

问题是我每次运行脚本时都会创建一个空白日志文件,即使不存在错误也是如此。我在网上看过,也看过几本书,我想不出只有在出现错误的情况下才能创建日志文件。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-11 01:08:58

输出重定向在脚本运行之前打开文件,因此无法判断文件是否会收到任何输出。但是,如果文件为空,您可以立即删除该文件:

代码语言:javascript
运行
复制
logfile="errorlog.$(date)"
# Note your typo; it's 2>, not >2
script 2> "$logfile"; [ -s "$logfile" ] || rm -f "$logfile"

我使用-f只是为了以防万一,因为如果$logfile不存在,而不仅仅是它为空,-s可能会失败。我使用;来分隔命令,因为$logfile是否包含任何内容并不取决于script是否成功。

您可以将其封装在一个函数中,以使其更易于使用。

代码语言:javascript
运行
复制
save_log () {
    logfile=${1:-errorlog.$(date)}
    cat - > "$logfile"
    [ -s "$logfile" ] || rm -f "$logfile"
}

script 2> >( save_log )
script 2> >( save_log my_logfile.txt )

这并不像重定向到文件那么简单,而且依赖于非标准特性(进程替换),但也不是太糟糕。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17576468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档