Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 上次命令执行的退出代码始终为0——在远程Shell执行$?_Linux_Bash_Shell_Unix - Fatal编程技术网

Linux 上次命令执行的退出代码始终为0——在远程Shell执行$?

Linux 上次命令执行的退出代码始终为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

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

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

以下是我的发现

输出始终是IP查找,如$?始终等于0

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
'