![如何在 RPM 安装后脚本中向 $PATH 变量添加新路径?](https://linux22.com/image/593065/%E5%A6%82%E4%BD%95%E5%9C%A8%20RPM%20%E5%AE%89%E8%A3%85%E5%90%8E%E8%84%9A%E6%9C%AC%E4%B8%AD%E5%90%91%20%24PATH%20%E5%8F%98%E9%87%8F%E6%B7%BB%E5%8A%A0%E6%96%B0%E8%B7%AF%E5%BE%84%EF%BC%9F.png)
我希望每次安装 RPM 包时都自动向 $PATH 变量添加新路径。
我尝试在我的 RPM 中使用安装后脚本。以下是包含此安装后脚本的 RPM 规范文件的一部分:
%post
PATH=$PATH:/usr/app/mdg/bin
export PATH
但安装成功后,$PATH 没有改变。请帮我解决这个问题。
答案1
当您在 RPM 的后脚本中添加路径时,它仅在安装 shell 的持续时间内设置。
在您的 RPM 中,您想要安装一个custom.sh
文件/etc/profile.d/
。
# cat /etc/profile.d/custom.sh
#!/bin/bash
PATH=$PATH:/usr/app/mdg/bin
export PATH
如果您使用 CSH,则该文件应命名为custom.csh
。
答案2
只需向 bin 路径添加软链接,而不必更改环境变量:
%install
# ...
ln -s /usr/app/mdg/bin/your-program /usr/bin/your-program
答案3
您可以创建指向 PATH 中已存在的路径的软链接,而不是将应用程序添加到 PATH。但是,我建议在%post
步骤中创建链接 - 这将在目标机器上执行,而不是在构建代理上执行。这样做的原因是您可能需要权限才能在或步骤sudo
中添加链接。如果您在中创建链接,那么您可以使用任一方式,但在另一台主机上。%build
%install
%post
sudo
%define _location /usr/app/%{_name}
...
%post
ln -sf %{_location}/bin/%{_name} /usr/bin/%{_name}
# ln -sf /usr/app/mdg/bin/mdg /usr/bin/mdg
另外,当您从机器中删除应用程序时,请记住删除链接:
%postun
unlink /usr/bin/%{_name}
# unlink /usr/bin/mdg