【问题标题】:remove entries from PATH while uninstalling rpm卸载 rpm 时从 PATH 中删除条目
【发布时间】:2015-03-15 01:16:00
【问题描述】:

为了让系统保持更清洁的状态,我尝试从 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) 当前面链接中提到的命令从规范文件运行时,我需要做一些不同的事情吗?

2) 在 rpm 卸载期间删除 PATH 条目的推荐方法有哪些?

注意 我在规范文件中尝试过的命令是:

PATH=$(echo $PATH | sed -e 's;:\?/home/user/bin;;' -e 's;/home/user/bin:\?;;')

PATH=${PATH/:\/home\/user\/bin/}

【问题讨论】:

  • 更好用:PATH=$(echo $PATH | sed -e 's;/home/user/bin;;' -e 's;::;:;')
  • 首先,RPM 包通常没有理由在标准系统 PATH 之外安装二进制文件。
  • 当然不是普通用户需要自己运行的二进制文件,因此修改$PATH 是个好主意。事实上,通过 RPM 修改系统或用户的 $PATH 几乎总是错误的做法(除非在非常具体/受控的部署场景中)。

标签: linux bash rpm rpm-spec


【解决方案1】:

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

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

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

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

【讨论】:

  • 感谢 cmets 和回答。所以,Etan,你的建议是我尝试修改 .bashrc 或类似文件/删除在安装期间完成的更改。
  • 如果您的 RPM 在安装过程中对$PATH 进行了任何此类修改,那么可以,删除它们可能是合适的。不过,正如我刚刚在对 OP 的评论中所说,就我而言,修改 $PATH 的 RPM 是一个坏主意。
【解决方案2】:

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

我也同意其他人的观点,这可能是个坏主意,但如果您需要这样做,我会这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-08
    • 2011-11-15
    • 2015-11-12
    • 2013-03-30
    • 1970-01-01
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多