如何将子shell中命令的返回状态转换为主shell?

时间:2018-04-30 12:52:04

标签: bash shell unix sh

我想检索正在子shell中执行的命令的返回状态。

我从Unix Box A运行以下脚本,它对Box B具有无密码SSH访问权限,其脚本中的ip_addr提及其IP。

我想获得在当前环境中在子shell中运行的命令的返回状态。

即如果以下命令失败:

echo "cmd" | system_program> 2>> /dev/null

然后echo $?应该打印非零值,我应该能够使用该值来决定进一步的行动。

我的脚本片段是:

sample.sh

ip_addr="xxx.xxx.xx.xx"

status=$(ssh -q -T $ip_addr << EOF
rm /tmp/program.log; echo "cmd" | system_program> 2>> /dev/null; echo $?
EOF
)

1 个答案:

答案 0 :(得分:0)

您不需要here-doc或echo。尝试:

ssh -q -T $ip_addr 'rm /tmp/program.log; echo "cmd" | system_program> 2>> /dev/null'

或者如果你想使用here-doc set errexit:

status=$(ssh -q -T $ip_addr << EOF
set -o errexit
rm /tmp/program.log; echo "cmd" | system_program> 2>> /dev/null
EOF
)