我正在研究这个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刚刚安装”,并以(return 1
结尾,这意味着以“错误”结尾,不是吗?)
如果用户要求Debian/Ubuntu软件包系统安装我的软件包,脚本还会删除两个目录
这是对的还是我遗漏了什么
从
help set
但一些人(bash常见问题解答和irc freenode#bash常见问题解答的作者)认为这是一种不好的做法。建议使用:
发生错误时运行
do_something
函数见http://mywiki.wooledge.org/BashFAQ/105
set -e
如果命令或管道出现错误,则停止脚本的执行-这与默认shell行为相反,即忽略脚本中的错误。在终端中键入help set
以查看此内置命令的文档我是在试图弄清楚由于
set -e
而中止的脚本的退出状态时发现这篇文章的。答案在我看来并不明显;这就是答案。基本上,set -e
中止命令(例如shell脚本)的执行,并返回失败命令的退出状态代码(即内部脚本,而不是外部脚本)例如,假设我有shell脚本
outer-test.sh
:inner-test.sh
的代码是:当我从命令行运行
outer-script.sh
时,我的外部脚本将以内部脚本的退出代码终止:相关问题 更多 >
编程相关推荐