我在 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) 后停止工作。 为什么脚本停止工作,我该如何解决?
答案 0 :(得分:1)
既然这只是一个片段,那么脚本中的片段之前是否启用了set -e
?如果是这样,那么我假设 ssh 返回一个非零退出代码,并且由于启用了 set -e
,脚本在到达 echo "test 2"
答案 1 :(得分:0)
我对此进行了测试,并且确实使用 heredoc 发送命令,set -e
和 exit
的这种组合返回 1 而不是 0,经测试。
但我认为,在某个地方,在执行 set -e
的上下文中设置了另一个 echo "test2"
。
我们有一些可行的解决方案:
exit
因为它不是必需的,您正在向目标 ssh 主机发送命令,并且会话的终止是在 heredocs 完成时自动完成的。ssh target "set -e ; echo \"test\"; exit"
工作得很好(不知何故),但你必须注意字符串转义。