Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.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
Bash 远程SSH会话上的退出代码_Bash_Ssh_Exit Code - Fatal编程技术网

Bash 远程SSH会话上的退出代码

Bash 远程SSH会话上的退出代码,bash,ssh,exit-code,Bash,Ssh,Exit Code,我正在尝试捕获远程SSH脚本的退出代码: ssh remoteuser@server" exit_on_error() { exit_code=$1 if [ "$exit_code" -ne "0" ]; then >&2 "echo command failed with exit code ${exit_code}."

我正在尝试捕获远程SSH脚本的退出代码:

ssh remoteuser@server"
        exit_on_error() {
          exit_code=$1
          if [ "$exit_code" -ne "0" ]; then
            >&2 "echo command failed with exit code ${exit_code}."
          fi
          echo "exit_code is $exit_code"
        }

        ls -la blah
        exit_on_error $? !!
"
我得到的是:

ls:无法访问blah:没有这样的文件或目录

bash:第3行:[:-ne:应为一元运算符

退出代码为

blah
当然不存在。我只是试图捕获该命令的退出代码。我以为是本地变量对远程变量的扩展,所以我尝试转义$1等等,但没有效果。我尝试将其全部放在
bash--login-c
块中,但没有更改


知道我哪里出错了吗?

它不起作用,因为变量是在字符串发送到服务器之前由bash解析的。您可以通过使用单引号来包装代码发送,或者在服务器上创建带有
排版的函数来忽略这一点。请注意,后一个选项仍然需要直接转义变量他被绳子缠住了

单引号:

$sshuser@server ' 
函数退出时出错{[$1-eq 0]| | echo“error”}
这是一个没有文本的文件吗
是否在错误$时退出?
'
创建命令:

!/bin/bash
函数退出时出错{
[1美元-等式0]| |回声“错误”;
}
sshuser@server "
$(排版-f退出时出错)
这是一个没有文本的文件吗
退出错误\$?
"
出口0

请参见:这太简单了。@MarkPlotnick这应该是答案:)
!!
应该做什么?
退出时出错
没有查看它的任何其他参数。@chepner哦,对不起:我上面粘贴的是非常精简的版本。!!正在捕获最后一个命令。我正在将它添加到giv的echo语句中e更多信息。顺便说一句,如果您想远程使用局部变量,请将双引号括在一个单引号中:
“'$STOP'