外壳脚本错误处理



我正在清理脚本的输出。例如:

rm -f ./file

没有这样的文件或目录

我想为此命令实现一些错误检查,相当于 try/catch 语句。换句话说,如果命令失败,我想捕获错误。

Python:

try:
    os.remove('./file')
    champagne_for_everybody
except:
    throw_myself_in_the_river

壳:

if rm ./file
then
    champagne_for_everybody
else
    throw_myself_in_the_river
fi

笔记:

  • 不要使用 -f - POSIX rm在使用 -f 时忽略丢失的文件。
  • 如果可以避免,请不要使用shell。Python和其他现代语言内置了更复杂的错误处理。

为什么不使用简单的脚本?

file=$1
if [ ! -f $file ]; then
    echo "File not found!"
else 
    rm -f $file
fi

当您运行它时,脚本将告诉您给定文件是否存在。

您还可以通过在 echo 命令后使用 2>&1 重定向到stderrstdout。您还可以在 if 语句的末尾添加 exit 1,因为退出状态 1 通常表示命令未成功执行。

这不会以您想要的确切方式工作,但在 bash 中,这是检测错误的最接近方法。

使用set -e或者您可以使用&&||实现相同的行为

最新更新