在正常命令中我可以根据退出代码执行其他命令:
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.log
和stderr.log
包含的输出除外command
。然后,您可以使用grep
stderr.log 检查错误,如果有错误,则可以对其进行处理。您可以将以下内容添加到代码中:
if grep "" stderr.log; then
command_if_fail
else
command_if_OK
fi
它的作用是检查错误日志中是否有任何错误发生,如果发现错误,则执行失败命令,否则执行 OK 命令。
更新请参阅 dave_thompson_085 的评论,以获得更清晰的解决方案