一尘不染

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

linux

我正在研究脚本从该脚本的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已安装”
并结束(return 1表示以“错误”结尾,不是吗?)。

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

这是对的还是我缺少什么?


阅读 296

收藏
2020-06-02

共1个答案

一尘不染

来自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

2020-06-02