我想获取我的远程命令的退出代码。 通常这很容易,但是我需要通过堡垒主机执行命令,我不知道可以通过简单的方法来执行此操作。
所以,这是我的体系结构图。
PC => Bastion => remote host
我使用以下代码执行命令并检查返回代码:
ssh -q -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -At ubuntu@$ip_bastion ssh -Aq -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ubuntu@$ip_server bash <<EOF
{ ${cmd} ; } 2>&1 | sed -e 's/^/$(colors_next exec)$region:$ip:$type${normal} /'
EOF
echo $?
if [[ $? -ne 0 ]]; then
error "Error during the command execution."
exit 1
fi
但是,当我的命令失败时(在最终服务器上返回255),返回码始终等于0。
感谢您的帮助:)
答案 0 :(得分:0)
echo
命令正在伤害您。您需要在回显之前捕获$?
的值,因为假设echo
命令成功执行,echo
会将其重置为0。
ssh -q -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -At ubuntu@$ip_bastion ssh -Aq -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ubuntu@$ip_server bash <<EOF
{ ${cmd} ; } 2>&1 | sed -e 's/^/$(colors_next exec)$region:$ip:$type${normal} /'
EOF
rc=$?
echo $rc
if [[ $rc -ne 0 ]]; then
error "Error during the command execution."
exit 1
fi
(可选)您可能想要exit $rc
,以便您的脚本以与SSH命令退出时相同的返回码退出,这在某些情况下可能有助于找出问题所在。
答案 1 :(得分:0)
如果您正在使用bash,则可以使用PIPESTATUS数组变量来获取管道中每个元素的退出状态。
getString()