在我的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)发送到标准输出(文件描述符1),并将其分配给var Q:
$ Q=$(grep text file 2>&1)
$ echo $Q
grep: file: No such file or directory
这是默认行为,stderr通常设置为您的终端(并且没有缓冲区),因此当您在某个地方管道stdout时会看到错误。如果您想将stderr与stdout合并,那么以下是语法
command >file 2>&1