上一次命令执行的退出代码始终为0--在远程Shell执行中$



我正在尝试执行一个脚本,在脚本的中途,它在远程shell中执行部分代码,然后再次返回到同一个本地shell。

但是,我的问题是关于在远程shell中执行的命令的退出代码。我正试图根据退出代码,用if-then-else远程进行决策。当它没有按预期执行时,我试图缩小问题范围。

以下是我的发现,

输出始终为IP Found,如$?总是等于0。

ssh root@<remote server> bash -c "'
host www.google.com123
if [ $? != 0 ]
then
echo "Invalid Host"
else
echo "IP Found"
fi
'"

此外,在这种情况下,预期输出相同

ssh root@<remote server> bash -c "'
host www.google.com
if [ $? != 0 ]
then
echo "Invalid Host"
else
echo "IP Found"
fi
'"

参考:我从这里开始了解这种远程执行方法

请帮助我理解远程shell执行的这种行为。此外,如果有任何其他方法可以通过ssh在远程执行shell脚本的一部分,请提出建议。

最外面的引号是双引号,因此在远程运行bash之前,$?会在本地展开。相反,使用

ssh root@<remote server> 'bash -c "
host www.google.com123
if [ $? != 0 ]
then
echo "Invalid Host"
else
echo "IP Found"
fi
"'

更简单的是完全避免显式检查$?

ssh root@<remote server> 'bash -c "
if ! host www.google.com123
then
echo "Invalid Host"
else
echo "IP Found"
fi
"'

更简单的是不运行第二个不必要的shell。

ssh root@<remote server> '
if ! host www.google.com123
then
echo "Invalid Host"
else
echo "IP Found"
fi
'

最新更新