我正在研究这个preinst文件的内容,这个脚本在从Debian归档(.deb)文件中解包之前执行.

该脚本包含以下代码:

#!/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软件包系统安装我的软件包,脚本还会删除两个目录.

这是对的还是我遗漏了什么?

推荐答案

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

Linux相关问答推荐

在不影响ROS2安装的情况下更新Ubuntu Linux中的CMake

计算与文件第一列对应的第二列中的字符串出现次数

我需要从 Ubuntu 中删除 .txt 文件中以白色间距分隔的行的白色间距

在 bash 脚本中保持两个进程处于活动状态(并在死亡时重生它们)

如何让xargs对 bash 脚本中find命令找到的所有文件执行?

如何使用 sed 和 awk 命令提取模式?

$RANDOM 变量在输出通过管道后似乎没有改变

如何使用 Bash 将随机数据块写入文件

使用 Dockerfile RUN 执行某些操作但忽略错误

用于判断 shell 脚本是否正在运行的 Linux 命令

sed: -i 不能与 Mac OS X 上的标准输入一起使用

如何像 Nautilus 那样从命令行挂载?

在 C 中设置环境变量

如何下载较旧的 google play 服务?

命令行 Arduino 编译和上传?

grep 递归查找 Linux 上的特定文件类型

事件驱动和异步有什么区别?在 epoll 和 AIO 之间?

带有日期和时间的 Linux 命令历史记录

使用 WGET 运行 cronjob PHP

在 Docker 容器中运行的 JVM 的驻留集大小 (RSS) 和 Java 总提交内存 (NMT) 之间的差异