我正在为越狱的iOS编写调整,这些调整打包在.deb
个文件中。调整将其数据保存在/var/mobile/Library/Application Support/TweakName/file.save
。当用户卸载调整时,我想rm
保存文件,这样我就不会留下文件了。但我的理解是postrm
脚本在更新包时以及删除时运行,并且我希望保留版本之间保存的状态,因为我不希望任何更新更改保存格式(如果确实出现,我可以处理它。)
那么,有没有办法区分卸载和更新,并且仅在卸载的情况下运行命令?
答案 0 :(得分:3)
更新应用程序确实运行“删除”脚本(以及下一版本的安装脚本)。
但是,软件包系统也会pass command line parameters to the scripts,您可以使用它们来确定您所处的方案:升级或卸载。< / p>
如果您只想反向设计传递给脚本的参数,请将其放在脚本中(例如postrm
):
echo "postrm called with args= " $1 $2
当我安装更新并删除软件包时,我会看到:
iPhone5:~ root# dpkg -i /Applications/HelloJB.deb
(Reading database ... 3530 files and directories currently installed.)
Preparing to replace com.mycompany.hellojb 1.0-73 (using /Applications/HelloJB.deb) ...
prerm called with args= upgrade 1.0-73
Unpacking replacement com.mycompany.hellojb ...
Setting up com.mycompany.hellojb (1.0-74) ...
postinst called with args= configure 1.0-73
iPhone5:~ root# dpkg -r com.mycompany.hellojb
(Reading database ... 3530 files and directories currently installed.)
Removing com.mycompany.hellojb ...
prerm called with args= remove
postrm called with args= remove
因此,如果您只想在卸载期间rm
文件,请将其放在postrm
脚本中:
#!/bin/bash
echo "postrm" $1
if [ $1 = "remove" ]; then
echo "deleting user data on uninstall"
/bin/rm /var/mobile/Library/Application Support/TweakName/file.save
fi
exit 0
注意:您没有说明这些是由Cydia安装,还是由dpkg
直接在命令行安装。我现在无法用Cydia测试,但一般概念应该是相同的。您可能已经注意到,在通过Cydia安装软件包时,它会在安装程序脚本运行时向您显示标准输出。