任何输出的bash脚本中的grep stderr

时间:2014-02-17 13:03:45

标签: bash grep stderr

在我的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。或者有没有理由为什么管道文件更好?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

command >file 2>&1