我使用 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
环境变量。这两个命令不会并行运行。