Bash
命令失敗時退出 Bash 腳本 (sshpass)
我需要通過 SSH 對伺服器列表執行操作。
我正在使用 sshpass,該操作可能會失敗,但它應該會發生幾次,並且腳本仍應繼續。
#!/bin/bash while read address; do echo -n "$address " sshpass -p password ssh -o StrictHostKeyChecking=no user@$address 'ls /path/to/some/dir' done < address-list
但是,該命令通過 ssh 在第一台主機上執行失敗,腳本立即退出。
無論如何,我怎樣才能讓循環繼續執行?在我的命令後添加退出並不能解決此問題,並且取消設置錯誤退出
set +e
也不起作用。
ssh
將從循環中繼承標準輸入流並儘可能多地從中讀取,這意味著它將從您的address-list
文件中讀取剩餘的行。由於ssh
正在從文件中讀取剩餘的行,因此循環只會進行一次迭代。從技術上講,該腳本不會過早終止或以任何方式失敗,它只是沒有執行您希望它執行的操作。為避免這種情況,請使用
ssh -n
防止ssh
從標準輸入讀取:while read address; do echo -n "$address " sshpass -p password ssh -n -o StrictHostKeyChecking=no "user@$address" 'ls /path/to/some/dir' done < address-list
ssh
以這種方式執行,以便您能夠將數據傳遞到在遠端主機上啟動的某個程序中,但正如您所發現的,在您的情況下,這將阻止您的循環正常執行。