【问题标题】:how to check ssh exit command executed?如何检查已执行的 ssh 退出命令?
【发布时间】:2017-08-20 04:32:16
【问题描述】:

我想检查exit 命令是否在 ssh 会话中成功执行。

我的第一次尝试是使用命令exit && echo $? || echo $?echo $? || echo $?,如果退出成功,它应该打印 0。
问题是echo never execute if exit execute success 因为连接断开并且后面的命令丢失。

我的第二次尝试是将命令拆分为两个命令,如下所示:

$ exit
$ echo $?  

如果exit执行成功,echo $?应该是0
但是另一个问题是echo $? 可能会被吞掉,因为它发送得太快以至于在exit 被执行之前就到达了远程ssh 主机。

那么,如何确保exit 在发送下一条命令之前在远程主机上执行?

更新
使用阶段是我以程序语言执行shell命令并通过ssh管道流发送消息。所以,我不知道退出命令执行时间。如果退出命令未完成,我的后续命令将被吞掉,因为它们发送到退出的主机。 这就是为什么我关心执行的退出命令。

【问题讨论】:

    标签: shell ssh


    【解决方案1】:

    如果您主要关心的是知道您回到了本地计算机,那么您可以在脚本的早期定义一个变量,该变量在 ssh 之前在本地计算机上是已知的。然后退出后,您可以测试该变量是否存在。如果存在,则您将返回本地计算机,如果不存在,则尝试再次退出,因为您未返回本地计算机。

    #define this before ssh
    uniqueVarName333=1
    

    然后在你的脚本中:

    # ssh stuff
    exit
    if [ -z ${uniqueVarName333+x} ]; then exit; else echo "Back on local machine"; fi
    

    或者你可以多次检查exit是否成功,以确保在你命令它到远程机器时它是成功的。

    exit || exit || exit #check it as many times as you feel to get the probability of exiting close to 0
    

    【讨论】:

    • 嗨,请看我的“此外,...”部分。如果 exit 未执行,后面的命令 echo $? 可能会被吞下。
    • 您的主要问题是否只是想知道您是否回到了本地计算机?您可以将 whoami 的结果保存为变量,然后再比较结果。只是一个想法。
    • 检查退出状态 ||退出也可以 - 请参阅上面的编辑
    • 我已经考虑过方法,但名称可能相同
    • 另一个编辑。可能不是您正在寻找的东西,但它是一个关于如何判断您是否再次回到本地机器上的想法。
    【解决方案2】:

    灵感来自@9Breaker。
    我已经通过在空闲时间(例如 15 毫秒)反复调用 echo 'END-COMMAND' 标志来解决这个问题。
    通过一个 shell 通道示例来澄清这一点:

    echo '' && echo 'BEGIN-COMMAND' && exit
    echo 'END-COMMAND'
    //if not response repeat send `echo 'END-COMMAND'`
    echo $? && echo 'END-COMMAND'
    //if not response repeat send `echo 'END-COMMAND'`
    echo $? && echo 'END-COMMAND'
    

    我们可以获取 IO 流字符并解析流 util 匹配 BEGIN-COMMAN 和 END-COMMAND。
    响应可能成功:

    BEGIN-COMMAND
    0
    END-COMMAND  //should be send multi times to get the response
    

    如果连接时网络中断,则失败:

    BEGIN-COMMAND
    ssh: connect to host 192.168.1.149 port 22: Network is unreachable
    255
    END-COMMAND
    

    【讨论】:

      猜你喜欢
      • 2010-12-30
      • 1970-01-01
      • 2011-03-24
      • 2020-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-09
      相关资源
      最近更新 更多