在管道中获取$ PIPESTATUS


2

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

some-cron-script.sh | check_pipe.sh

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

谢谢!

Answers:


1

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

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

或者使用(临时)文件:

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

在这两种情况下 check-pipe 得到的输出 some-script 通过stdin加上退出状态为 status 环境变量。这两个命令不是并行运行的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.