获取管道内的 $PIPESTATUS

获取管道内的 $PIPESTATUS

我使用 bash 脚本来检查 cron-jobs 的输出:

一些-cron-脚本.sh |检查管道

check_pipe.sh 读取管道,如果发现其中定义的关键字(如“错误”或“失败”),它会发送电子邮件。现在我想检查 check_pipe.sh 中第一个脚本的退出状态。不幸的是,执行 check_pipe.sh 时尚未设置 ${PIPESTATUS[@]}。如果我在新命令中询问管道后的 PIPESTATUS,则会给出两个值 - 但对我来说太晚了。有什么帮助吗?

谢谢你!

答案1

将输出存储在变量中(如果变量不是太大,请参见shell 变量容量):

output=$(some-script)
status=$? check-pipe <<<"$output"   # warning: <<< is not POSIX
unset output

或者使用(临时)文件:

some-script >file
status=$? check-pipe <file
rm file

两种情况下,都会通过 stdincheck-pipe获取输出some-script,并将退出状态作为status环境变量。这两个命令不会并行运行。

相关内容