Linux(Ubuntu)-如何在命令输出通过管道传输后评估命令的退出代码?

Linux(Ubuntu)-如何在命令输出通过管道传输后评估命令的退出代码?

在正常命令中我可以根据退出代码执行其他命令:

command.sh && command_if_OK.sh || command_if_fail.sh

但我想将输出通过管道传输到日志文件,然后根据退出代码执行命令。类似这样,但显然行不通,因为退出代码将是 tee 之一,而不是原始命令。怎么做?

command.sh | tee -a logfile.txt && execute_if_command_ok.sh || execute_if_command_failed.sh

请问有什么建议吗?

答案1

回去好好解释一下我的链接。从答案中撕下一段代码进行构建,请参阅此sh文件(lhunath):

out="${TMPDIR:-/tmp}/out.$$" err="${TMPDIR:-/tmp}/err.$$"
mkfifo "$out" "$err"
trap 'rm "$out" "$err"' EXIT
tee -a stdout.log < "$out" &
tee -a stderr.log < "$err" >&2 &
[sh file here] >"$out" 2>"$err"

因此,该链接将引导您完成所有这些操作,但文件stdout.logstderr.log包含的输出除外command。然后,您可以使用grepstderr.log 检查错误,如果有错误,则可以对其进行处理。您可以将以下内容添加到代码中:

if grep "" stderr.log; then
    command_if_fail
else
    command_if_OK
fi

它的作用是检查错误日志中是否有任何错误发生,如果发现错误,则执行失败命令,否则执行 OK 命令。

更新请参阅 dave_thompson_085 的评论,以获得更清晰的解决方案

相关内容