为什么退出状态始终为0.什么是解决方案

时间:2014-10-09 09:09:16

标签: shell

下面的代码是我的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.这是正确的,因为主机上不存在此目录。

3 个答案:

答案 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,已打印。