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