Bash 脚本在 ssh 退出时停止

时间:2021-06-24 13:46:23

标签: bash debian

我在 bash 脚本中有一个片段:

ssh -oStrictHostKeyChecking=no -T $SSH_HOSTNAME -p $SSH_PORT <<EOM
    set -e
    echo "test"
    exit
EOM

echo "test 2"

显示语句“test”但不显示“test 2”。 我也尝试使用“exit 0”而不是“exit”。

该脚本在较旧版本的 debian (2016) 上工作,但在更新 (2021) 后停止工作。 为什么脚本停止工作,我该如何解决?

2 个答案:

答案 0 :(得分:1)

既然这只是一个片段,那么脚本中的片段之前是否启用了set -e?如果是这样,那么我假设 ssh 返回一个非零退出代码,并且由于启用了 set -e,脚本在到达 echo "test 2"

之前退出

答案 1 :(得分:0)

我对此进行了测试,并且确实使用 heredoc 发送命令,set -eexit 的这种组合返回 1 而不是 0,经测试。 但我认为,在某个地方,在执行 set -e 的上下文中设置了另一个 echo "test2"。 我们有一些可行的解决方案:

  1. 删除 exit 因为它不是必需的,您正在向目标 ssh 主机发送命令,并且会话的终止是在 heredocs 完成时自动完成的。
  2. 如果脚本不是很长,切换到内联命令 ssh target "set -e ; echo \"test\"; exit" 工作得很好(不知何故),但你必须注意字符串转义。