失败的命令不会停止脚本执行
在大多数脚本语言中,如果函数调用失败,它可能会抛出异常并停止执行程序。Bash 命令没有例外,但它们确实有退出代码。非零退出代码表示失败,但是,非零退出代码不会停止程序的执行。
这可能会导致危险(虽然是公认的做作)情况如此:
#!/bin/bash
cd ~/non/existent/directory
rm -rf *
如果切换到此目录失败,Bash 将忽略该失败并转到下一个命令,擦除清理运行该脚本的目录。
处理此问题的最佳方法是使用 set 命令:
#!/bin/bash
set -e
cd ~/non/existent/directory
rm -rf *
如果任何命令返回非零状态,set -e
会告诉 Bash 立即退出脚本。