我创建了很多deb文件,我没有遇到任何问题,而且它们都运行得非常好。但是,如果我想替换用户主目录中的文件,我不确定如何做到这一点。
我已经尝试将postinst文件从预定位置rsync转发到主目录,但由于postinst文件是以root身份运行的(由于debian安装程序以root身份运行),因此它被发送到根主目录而不是用户的主目录....
这是deb文件内容的一个例子:
Debian目录--->控制文件----> Postint文件
usr / share / desktop(包含文件的目录)
postinst文件具有sync命令,可将这些文件发送给用户主页:
#!/bin/sh
rsync -av /usr/share/desktop/ ~/.config/desktop/
问题是它是将文件发送到Root / home ...而不是默认用户home:(
我没有用户的用户名,因为这将在许多用户不同的计算机上使用,因此我无法使用sudo -u username
。
那我该怎么办?如何从deb安装中替换用户主目录中的文件?非常感谢任何帮助。
答案 0 :(得分:3)
在Bash脚本中,~
指的是当前用户的主目录。软件包安装脚本始终以root身份运行,因此“当前用户”在此上下文中的含义。
(您可能会认为软件包安装可能是由运行su
或sudo
的用户启动的,但在一般情况下,您不能认为是这种情况。)
在任何情况下,修改系统包中的用户文件都会显得非常可疑。如果需要是真实的,那么首先应该不将其作为系统包安装问题来处理。你实际试图完成什么?
您不仅违反了包管理不应干涉用户文件的基本原则;这种安排的结果是操作只能执行一次:如果用户已经安装了软件包,尝试再次安装它什么都不做(至少在卸载之前)。
更易于管理和可预测的方法似乎是使程序包提供此功能,但是让用户根据需要调用实际的同步(覆盖)脚本。也许你想以某种方式将它挂钩到桌面启动脚本中。
话虽如此,sudo
在$SUDO_USER
中公开了调用用户的身份,因此你可以查找它,如果没有设置就会失败。
顺便说一下,软件包脚本应该与dash
一起使用,因此您需要避免使用基本原则 - 例如,更喜欢$HOME
而不是~
。
答案 1 :(得分:0)
我设法找到了一种解决方法,虽然这不是我想要的,但这是我的解决方案,至少目前是这样。
#!/bin/sh
#This will move the desktop settings to required folder.
szAnswer=$(zenity --entry --text "Enter your login username\nThis must be entered correctly\n" --entry-text "Enter name of profile to use:")
xfce4-terminal -e "sudo rsync -av /usr/share/Desktop/ /home/$szAnswer/.config/xfce4/"
exit 0
换句话说,要求用户输入他的用户名,并将文件复制到该用户的主目录。优点是,如果他有多个用户,它将使用正确的用户。缺点是如果输入用户名错误,即使是拼写错误,安装也会失败。
但它确实有效,我已经测试过了。如果有人有更好的解决方案,我热切期待你的建议。