通过 ssh 执行的命令没有返回正确的返回码

Enu*_*nuy 7 ssh bash

为什么这不起作用?

$ ssh vm "bullshitcommand; echo $?"
bash: bullshitcommand: command not found
0
Run Code Online (Sandbox Code Playgroud)

我期望非零返回码。

Ash*_*ray 8

原因:

echo $?$?看来您实际上是在发送一个局部变量并要求在 ssh shell 中将其回显出来。您可以通过在 ssh 语句之前使用不存在的命令来证明这一点。例如:

notexistingcommand; ssh vm "echo $?" 产出

bash:不存在命令:找不到命令

127

甚至

export var=123; ssh vm "echo $var" 产出

123

解决方案:

使用远程变量可以做的是转义,这将吐出 -1(或 127):

ssh vm "nonexistentcmd; echo \$?"

或者您可以使用单引号 ( ' ),因为它们不会扩展变量并按字面意思使用 $ 符号

ssh vm 'nonexistentcmd; echo $?'