在bash脚本中为任何输出生成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)发送到标准输出(文件描述符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

相关内容

  • 没有找到相关文章

最新更新