下面的代码是我的shell脚本的一部分。 但我无法理解为什么退出状态(sshStatus)总是0? 我想要ssh输出以及退出状态。 请帮我找到解决方案。
local output="$(ssh -q -o ConnectTimeout=10 \
-o BatchMode=yes \
-o StrictHostKeyChecking=no \
-o UserKnownHostsFile=/dev/null \
$user@$host "$command" 2>&1)"
local sshStatus=$?
命令可以是:
command="[ ! -d /home/upendra/dfs ]"
command="cat /home/upendra/a.txt"
command="sh /home/upendra/dfs/bin/start-datanode.sh"
每当我在shell提示符下直接调用如下命令时:
ssh -q -o ConnectTimeout=10 \
-o BatchMode=yes \
-o StrictHostKeyChecking=no \
-o UserKnownHostsFile=/dev/null \
upendra@172.20.20.2 "[ ! -d /home/upendra/dfs ]" 2>&1
然后退出状态(echo $?)即将来临1.这是正确的,因为主机上不存在此目录。
答案 0 :(得分:1)
我在此页面上找到了解决方案:bash shell - ssh remote script capture output and exit code?这是由于"本地输出"。 - Upendra
答案 1 :(得分:0)
每个命令都返回一个退出状态(有时称为返回状态或退出代码)。成功的命令返回 0 ,而不成功的命令返回非零值,通常可以将其解释为错误代码。表现良好的UNIX命令,程序和实用程序在成功完成后会返回 0 退出代码,但也有一些例外情况。
同样,脚本中的函数和脚本本身也会返回退出状态。函数或脚本中执行的最后一个命令确定退出状态。在脚本中,退出 nnn 命令可用于向shell提供 nnn 退出状态( nnn 必须是整数在0 - 255范围内)。
#!/bin/bash
echo hello
echo $? # Exit status 0 returned because command executed successfully.
lskdf # Unrecognized command. echo $? # Non-zero exit status
returned -- command failed to execute.
echo
exit 113 # Will return 113 to shell.
# To verify this, type "echo $?" after script terminates.
您的代码返回退出代码 0 ,这意味着您的shell脚本已成功执行。
答案 2 :(得分:0)
由于您的0
成功完成,因此您的总体状态为command
从本地计算机获取的退出状态是ssh会话中最后一个命令的退出状态
例如
$ ssh localhost
$ exit 5
$ echo $? #on local system
5
考虑没有任何命令的案例
$ ssh localhost
$ ls
#will list commands and exit succussfully
ctrl+d
$ echo $? #on local system
0
此处ls
命令的退出状态为0
,已打印。