失敗的命令不會停止指令碼執行

在大多數指令碼語言中,如果函式呼叫失敗,它可能會丟擲異常並停止執行程式。Bash 命令沒有例外,但它們確實有退出程式碼。非零退出程式碼表示失敗,但是,非零退出程式碼不會停止程式的執行。

這可能會導致危險(雖然是公認的做作)情況如此:

#!/bin/bash
cd ~/non/existent/directory
rm -rf *

如果切換到此目錄失敗,Bash 將忽略該失敗並轉到下一個命令,擦除清理執行該指令碼的目錄。

處理此問題的最佳方法是使用 set 命令:

#!/bin/bash
set -e
cd ~/non/existent/directory
rm -rf *

如果任何命令返回非零狀態,set -e 會告訴 Bash 立即退出指令碼。