【发布时间】:2016-12-30 08:20:36
【问题描述】:
我的 shell 脚本中有一个 ssh heredoc,如果 heredoc 中的其中一个命令出错,我该如何退出我的 shell 脚本。
我的shell脚本会是这样的
#!/bin/bash
set -o errexit
loginto_vm() {
ssh host@IP << ENDSSH
ls n1n
cd n1n
ENDSSH
echo 'done'
}
loginto_vm
如果“n1n”不存在并打印 echo 语句,它将从 ssh heredoc 退出,但我希望它从脚本中退出
【问题讨论】:
-
!/bin/bash set -o errexit loginto_vm() { ssh host@IP
-
cd 应该返回非零值,因此 ssh 应该返回非零值,并且您会期望
set -o errexit的语义会导致脚本中止。但是,众所周知,set -o errexit在许多旧 shell 中会出现意外行为,而现代 shell 中无疑存在边缘情况,你真的应该避免它。就做ssh host@IP << ENDSSH || exit