【问题标题】:bash need STDOUT+STDERR in log, and STDERR to its normal destinationbash 需要 STDOUT+STDERR 在日志中,并且 STDERR 到它的正常目的地
【发布时间】:2012-03-29 17:49:38
【问题描述】:

这是一项 cron 作业,STDERR 的输出会导致我需要的错误电子邮件通知。但是,错误可能不是致命的,所以我还需要包含在带有 STDOUT 的日志中的 STDERR 输出。怎么样?

【问题讨论】:

  • 这个问题每月 1-2 次。你没有找到任何有用的东西吗?祝你好运。

标签: bash shell stdout logging stderr


【解决方案1】:

好的,我花了几分钟研究如何仅使用标准的 shell 命令行来执行此操作。

为荒谬的命令行做好准备。

((./your-script 3>&1 1>&2 2>&3 3>&- | tee /dev/fd/2) 3>&1 1>&2 2>&3 3>&- ) |
    cat >logfile

关于这种可憎的东西,我唯一能说的就是它有效……而且我找不到任何更简单也有效的东西。哦,而且,它不需要bash 或任何东西。它可以在标准的 bourne shell 中运行。

我不知道为什么在结尾处必须有| cat,但没有它就行不通。

【讨论】:

  • 在末尾添加 cat 会更改行缓冲模式,因此您会更快(也许)看到输出,但我希望它最终都一样。
【解决方案2】:

以下命令适用于较少的字符:

((./your-script 3>&1 1>&2 2>&3- | tee /dev/fd/2) 3>&1 1>&2 2>&3- ) | cat > logfile

【讨论】:

    猜你喜欢
    • 2022-12-07
    • 1970-01-01
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    • 2019-03-29
    • 1970-01-01
    • 2023-03-23
    • 2010-10-14
    相关资源
    最近更新 更多