卸载rpm时从PATH中删除条目

时间:2015-01-16 12:22:17

标签: linux bash rpm rpm-spec

要使系统处于更干净的状态,我正在尝试从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/}

2 个答案:

答案 0 :(得分:3)

RPM %preun脚本无法影响任何正在运行的shell的PATH变量。这是不可能的。

它不能(直接)影响任何新shell的PATH变量。

它唯一能做的就是删除它对系统(或用户 shudder )shell启动文件所做的任何更改,这些文件导致PATH变量添加。

删除这些更改将导致任何新shell都没有进行这些更改,因此不会在其中包含那些额外的PATH条目。

答案 1 :(得分:1)

添加到PATH(以及随后将其删除)的正确方法是将文件yourpackage.shyourpackage.csh放入/etc/profile.d

我也同意其他人认为这可能是一个坏主意,但如果你需要这样做,那就是我的意思。