失败的命令不会停止脚本执行

在大多数脚本语言中,如果函数调用失败,它可能会抛出异常并停止执行程序。Bash 命令没有例外,但它们确实有退出代码。非零退出代码表示失败,但是,非零退出代码不会停止程序的执行。

这可能会导致危险(虽然是公认的做作)情况如此:

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

如果切换到此目录失败,Bash 将忽略该失败并转到下一个命令,擦除清理运行该脚本的目录。

处理此问题的最佳方法是使用 set 命令:

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

如果任何命令返回非零状态,set -e 会告诉 Bash 立即退出脚本。