我想在每次安装 RPM 软件包时自动向 $PATH 变量添加一个新路径。
我尝试在 RPM 中使用安装后脚本。以下是包含此安装后脚本的 RPM 规范文件的一部分:
%post
PATH=$PATH:/usr/app/mdg/bin
export PATH
但安装成功后 $PATH 并没有改变。请帮我解决这个问题。
答案1
您不能那样改变用户的环境。您可以尝试向 中添加一些内容/etc/profile
,但那是一场灾难。您可以将文件放入/etc/profile.d
,这更好,但您的发行版可能不支持它。最好的解决方案是从路径中已有的位置放置符号链接,例如:
ln -s /weird/place/my-program /usr/bin/my-program
答案2
您所做的就是在安装后脚本的持续时间内设置变量。这不会影响其他地方的路径。
系统路径是从许多位置设置的,其中一些位置取决于发行版。到处都存在的一种方法是/etc/profile
。但是/etc/profile
任何正常发行版的规则都不允许修改软件包安装脚本。
您问题的真正答案是:不要这样做。如果可执行文件属于该路径,并且由包提供,则该可执行文件属于/usr/bin
.您不必将可执行文件本身放在那里:这是通常的方式,但可以放置符号链接。例如,如果程序的所有可执行文件都位于 中/usr/lib/myprogram/bin
,则链接应位于 中的路径中的可执行文件/usr/bin
。在 rpm 中包含符号链接,以便包管理器可以正确跟踪它们(不要在安装后脚本中创建它们)。您可以在%install
RPM 规范的部分中创建它们,该规范在构建 RPM 时执行(另请参阅创建 RPM 时在 /usr/bin 中创建符号链接):
%install
…
ln -s ../../lib/myprogram/foo ../../lib/myprogram/bar ${RPM_BUILD_ROOT}%{_bindir}