bash 脚本中的 set -e 是什么意思?

新手上路,请多包涵

我正在研究该脚本在从其 Debian 存档 (.deb) 文件中解压缩该软件包之前执行的该 preinst 文件的内容。

该脚本具有以下代码:

 #!/bin/bash
set -e
# Automatically added by dh_installinit
if [ "$1" = install ]; then
   if [ -d /usr/share/MyApplicationName ]; then
     echo "MyApplicationName is just installed"
     return 1
   fi
   rm -Rf $HOME/.config/nautilus-actions/nautilus-actions.conf
   rm -Rf $HOME/.local/share/file-manager/actions/*
fi
# End automatically added section

我的第一个查询是关于这条线:

 set -e

我认为脚本的其余部分非常简单:它检查 Debian/Ubuntu 包管理器是否正在执行安装操作。如果是,它会检查我的应用程序是否刚刚安装在系统上。如果有,脚本会打印消息 “MyApplicationName is just installed” 并结束( return 1 意味着以“错误”结束,不是吗?)。

如果用户要求 Debian/Ubuntu 软件包系统安装我的软件包,该脚本还会删除两个目录。

这是对的还是我错过了什么?

原文由 AndreaNobili 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 879
2 个回答

help set

   -e  Exit immediately if a command exits with a non-zero status.

但某些人(bash FAQ 和 irc freenode #bash FAQ 作者)认为这是不好的做法。建议使用:

 trap 'do_something' ERR

发生错误时运行 do_something 函数。

http://mywiki.wooledge.org/BashFAQ/105

原文由 Gilles Quenot 发布,翻译遵循 CC BY-SA 4.0 许可协议

set -e 如果命令或管道出现错误,则停止执行脚本 - 这与默认的 shell 行为相反,即忽略脚本中的错误。在终端中键入 help set 以查看此内置命令的文档。

原文由 Robin Green 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题