要使系统处于更干净的状态,我正在尝试从rpm规范文件的%preun部分中删除PATH中的条目。
我在stackoverflow上找到了几个我试过的线程
What is the most elegant way to remove a path from the $PATH variable in Bash? 和 Linux: Remove path from $PATH variable
当我在终端上手动运行时,这两个链接中的答案都能正常运行。 但是,当我运行rpm -e xx命令时,它们不起作用。 如果成功安装后我的PATH看起来像这样:
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/lpp/mmfs/bin
我正在尝试删除/ usr / lpp / mmfs / bin,
rpm卸载后,PATH看起来像:
/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin
问题: 1)当从spec文件中运行前面链接中提到的命令时,是否需要执行不同的操作?
2)在rpm卸载期间删除PATH条目的一些推荐方法是什么?
注意 我在spec文件中尝试过的命令是:
PATH=$(echo $PATH | sed -e 's;:\?/home/user/bin;;' -e 's;/home/user/bin:\?;;')
和
PATH=${PATH/:\/home\/user\/bin/}
答案 0 :(得分:3)
RPM %preun
脚本无法影响任何正在运行的shell的PATH
变量。这是不可能的。
它不能(直接)影响任何新shell的PATH
变量。
它唯一能做的就是删除它对系统(或用户 shudder )shell启动文件所做的任何更改,这些文件导致PATH
变量添加。
删除这些更改将导致任何新shell都没有进行这些更改,因此不会在其中包含那些额外的PATH
条目。
答案 1 :(得分:1)
添加到PATH
(以及随后将其删除)的正确方法是将文件yourpackage.sh
和yourpackage.csh
放入/etc/profile.d
。
我也同意其他人认为这可能是一个坏主意,但如果你需要这样做,那就是我的意思。