我正在研究脚本在从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
Run Code Online (Sandbox Code Playgroud)
我的第一个问题是关于这一行:
set -e
Run Code Online (Sandbox Code Playgroud)
我认为脚本的其余部分非常简单:它检查Debian/Ubuntu包管理器是否正在执行安装操作.如果是,它会检查我的应用程序是否刚刚安装在系统上.如果有,脚本将打印消息"MyApplicationName刚刚安装"并结束(return 1意味着以"错误"结束,不是吗?).
如果用户要求Debian/Ubuntu软件包系统安装我的软件包,该脚本还会删除两个目录.
这是对的还是我错过了什么?
我看到一个客户端正在执行$bash -x命令,以查看该文件是否可执行(或ksh -x命令等),就像shell脚本-x中的if语句一样.
我的问题是:什么是$bash -x命令吗?
我的解释是在当前shell中的新bash shell中启动一个命令,继承相同的环境变量并由同一个用户执行.
有趣的是我可以做$ls但不是$bash -x ls,这给了:
(在AIX 6下)
/usr/bin/ls: /usr/bin/ls: cannot execute binary file
对我来说,错误的原因是一个谜 - 猜测它是由于一个特权,这意味着我的上述假设是不正确的.
另外,我相信$bash ls并且$bash -x ls是一回事(-x对于"执行")?
任何评论都非常感谢.
干杯!