【问题标题】:Grep stderr in bash script for any outputbash 脚本中的 Grep stderr 用于任何输出
【发布时间】:2014-02-17 13:03:44
【问题描述】:

在我的 bash 脚本中,我在不同的日志中使用 grep,如下所示:

LOGS1=$(grep -E -i 'err|warn' /opt/backup/exports.log /opt/backup/imports.log && grep "tar:" /opt/backup/h2_backups.log /opt/backup/st_backups.log)

if [ -n "$LOGS1" ] ]; then
        COLOUR="yellow"
        MESSAGE="Logs contain warnings. Backups may be incomplete. Invetigate these warnings:\n$LOGS"

我不想检查每个日志是否存在(还有比这更多的日志),我想在脚本运行时检查 stderr 以查看是否得到任何输出。 如果其中一个日志不存在,则会产生如下错误: grep: /opt/backup/st_backups.log: No such file or directory

我尝试使用 command 2> >(grep "file" >&2 之类的命令读取 sterr,但这似乎不起作用。

我知道我可以将输出通过管道传输到文件,但我宁愿在有任何输出时处理 stderr 而不是读取文件。或者有什么理由为什么管道到文件更好?

【问题讨论】:

    标签: bash grep stderr


    【解决方案1】:

    将标准错误(文件描述符2)发送到标准输出(文件描述符1)并将其分配给var Q:

    $ Q=$(grep text file 2>&1)
    $ echo $Q
    grep: file: No such file or directory
    

    【讨论】:

      【解决方案2】:

      这是默认行为,stderr 通常设置为您的终端(并且没有缓冲),因此当您在某处管道 stdout 时会看到错误。如果你想将 stderr 与 stdout 合并,那么这是语法,

      command >file 2>&1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-25
        • 2015-07-27
        • 1970-01-01
        • 2023-03-30
        • 1970-01-01
        • 2013-05-30
        相关资源
        最近更新 更多