Linux 上次命令执行的退出代码始终为0——在远程Shell执行$?
我试图执行一个脚本,在脚本的中途,它在一个远程shell中执行部分代码,然后再次返回到同一个本地shell 但是,我的问题是关于在远程shell中执行的命令的退出代码。我正在尝试根据退出代码使用if-then-else远程执行决策。当它没有按预期执行时,我试图缩小问题的范围 以下是我的发现 输出始终是IP查找,如$?始终等于0Linux 上次命令执行的退出代码始终为0——在远程Shell执行$?,linux,bash,shell,unix,Linux,Bash,Shell,Unix,我试图执行一个脚本,在脚本的中途,它在一个远程shell中执行部分代码,然后再次返回到同一个本地shell 但是,我的问题是关于在远程shell中执行的命令的退出代码。我正在尝试根据退出代码使用if-then-else远程执行决策。当它没有按预期执行时,我试图缩小问题的范围 以下是我的发现 输出始终是IP查找,如$?始终等于0 ssh root@<remote server> bash -c "' host www.google.com123 if [ $? != 0 ] then
ssh root@<remote server> bash -c "'
host www.google.com123
if [ $? != 0 ]
then
echo "Invalid Host"
else
echo "IP Found"
fi
'"
ssh root@bash-c“'
主机:www.google.com123
如果[$?!=0]
然后
回显“无效主机”
其他的
回显“找到IP”
fi
'"
此外,在这种情况下,预期输出相同
ssh root@<remote server> bash -c "'
host www.google.com
if [ $? != 0 ]
then
echo "Invalid Host"
else
echo "IP Found"
fi
'"
ssh root@bash-c“'
主机:www.google.com
如果[$?!=0]
然后
回显“无效主机”
其他的
回显“找到IP”
fi
'"
Ref:我是从一开始就知道这个远程执行方法的
请帮助我理解远程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
"'
更简单的是不运行第二个不必要的shell
ssh root@<remote server> '
if ! host www.google.com123
then
echo "Invalid Host"
else
echo "IP Found"
fi
'
ssh root@'
如果!主机:www.google.com123
然后
回显“无效主机”
其他的
回显“找到IP”
fi
'
感谢您抽出时间解决此问题。我会明确提到bashshell。以防万一bash以外的其他shell被设置为默认值。尽可能避免非标准构造,并且由于所需命令中没有bash
扩展,因此没有理由要求任何比符合POSIX的shell更具体的东西。
ssh root@<remote server> '
if ! host www.google.com123
then
echo "Invalid Host"
else
echo "IP Found"
fi
'