我创建了一个debian包,并在postinst脚本中添加了以下代码:
path="$HOME/sample"
echo "$path"
if [ -d "$path" ]
then
rm -rf "$path"
echo 'File deleted successfully :)'
fi
这样如果路径存在,它会在安装过程中删除它。当我通过dpkg
安装我的.deb软件包时,它可以正常工作。但是在通过Ubuntu软件中心安装时,它们都不起作用。为什么会这样?
对于后台,我创建了一个应用程序,可以在用户的主目录中创建一个目录,也可以在系统安装根目录。如果我在卸载后重新安装或重新安装,我需要检查目录是否存在或不;如果存在,我需要删除它。我已将该应用程序作为Debian软件包分发。所以问题是如何检查目录是否存在于主目录中?安装应用程序时不会创建该目录。它是在运行应用程序时从外部创建的。另请注意,我无法将其更改为其他文件夹,因为无法更改应用程序。
答案 0 :(得分:1)
问题不在于Ubuntu,而是在HOME
中使用postinst
。它显然恰好与您自己的帐户sudo dpkg
一起使用(尽管在某些情况下,sudo
也不会传播您的HOME
,但这不受支持或定义明确。< / p>
无论如何,
HOME
在Debian包中没有意义,因为它是一个系统范围的安装,而HOME
是每用户变量。
如果我正确理解您的要求,您需要遍历所有用户的主目录,并从每个用户中删除sample
文件夹。
# Ad-hoc
getent passwd | cut -d: -sf6 |
while read dir; do
test -d "$dir" || continue
rm -rvf "$dir/sample"
done
这是非常侵入性的,所以你真的应该尝试更改应用程序 - 如果用户出于某种其他原因而拥有名为sample
的目录,该怎么办?应用程序应使用合理唯一的点名称(.appname-sample
?),或将其每用户数据存储在系统可以正确管理的系统位置。
事实上,与此同时,您的postinst
脚本应该只将sample
目录移动到类似.sample.dpkg-old
的目录。这同样具有侵入性,但至少它可以避免破坏您的用户。数据完全是愚蠢的错误。