Piped命令返回没有bash&PIPESTATUS的代码

问题描述 投票:0回答:2

我有一个有限的busybox单元,只有/ bin / sh,所以没有bash并且没有PIPESTATUS

尝试运行命令:

upgrade.sh 2>&1 | tee -a log.log | udplogger

现在,我需要获取upgrade.sh的退出代码,才能继续进行其他升级或停止。

任何想法如何?在bash上,您有pipestatus,在这里我可以得到第一个命令的结果,但是只有/ bin / sh我不知道。

谢谢

linux shell command-line pipe busybox
2个回答
1
投票

如果您可以在子Shell中执行该管道,可以使用这样的重定向:

{ status=$( { { upgrade.sh 2>&1; echo $? >&4; } | tee -a log.log | udplogger >&3; } 4>&1 ); } 3>&1
echo $status

0
投票

您可以拆分流吗?

up_out=$(upgrade.sh 2>&1)
up_status=$1
echo "${up_out}" | tee -a log.log | udplogger
echo "${up_status}"
© www.soinside.com 2019 - 2024. All rights reserved.