2016-08-23 61 views
2

我的shell腳本中有一個ssh heredoc,如果heredoc中的某個命令出現錯誤,我該如何退出shell腳本。如果heredoc命令失敗,如何從腳本中退出

我的shell腳本會是這樣

#!/bin/bash 

set -o errexit 

loginto_vm() { 

    ssh [email protected] << ENDSSH 

ls n1n 

cd n1n 

ENDSSH 

    echo 'done' 

} 

loginto_vm 

這從SSH定界符退出,如果「N1N」是不存在的,並打印echo語句,但我想它從腳本

+0

!/斌/慶典 集-o errexit loginto_vm(){ SSH主機IP @<< ENDSSH LS N1N CD N1N ENDSSH回聲 '完成'} loginto_vm – anil

+0

CD應該返回非零,所以ssh應該返回非零值,並且你會期望'set -o errexit'的語義導致腳本中止。然而,'set -o errexit'已知在許多舊殼中都有意想不到的行爲,現代殼中無疑存在邊緣情況,你真的應該避免它。只要執行'ssh host @ IP << ENDSSH || exit' –

回答

0

出口這裏的命令由遠程shell執行。你需要在這裏的文件裏面傳入set -o errexit,以便它在那裏可見;它完全獨立於運行ssh命令的外殼。

1

您可以在定界符檢查任何關鍵命令的退出狀態並以一個錯誤退出SSH - 再檢查SSH退出狀態退出腳本

ssh [email protected] <<ENDSSH 
ls n1n || exit 1 
cd n1n || exit 2 
ENDSSH 
(($?)) && exit 1 
echo 'done' 
0

您可以指示shell退出,如果什麼錯誤,如在任何shell腳本:

$ sudo su <<EOF    
set -e 
echo before 
bad-command 
echo after 
EOF 

輸出:

before 
sh: line 3: bad-command: command not found 

通知after未打印。

相關問題