在bash中清理$PATH

8

我的路径有很多条目是很久以前由脚本添加的。它们不在我的.bashrc.bash_profile.bash_login中。

我担心在.bashrc中重置我的路径会产生长期不良影响。有没有办法找出路径被添加到哪里并手动删除它们?这些路径总是被文件添加的吗?还是路径会被缓存到某个地方?如果是后者,清理起来容易吗?


1
最好在superuser.com的堆栈交换网站上发布。 - chown
这也适合在unix.stackexchange.com上提问。 - Cascabel
4个回答

14

查找修改了你的 PATH 的人最简单的方法是运行:

  $ bash --login -i -xv 2>&1 | grep ' \. '

例如,我得到了以下结果:

+ . /etc/profile.d/bash_completion.sh
        . /etc/bash_completion
++ . /etc/bash_completion
+++ . /etc/bash_completion.d/abook
+++ . /etc/bash_completion.d/ant
+ . /etc/profile.d/lapack0.sh
+ . /etc/profile.d/openssl.sh
+ . /etc/profile.d/qt3-devel.sh
+ . /etc/profile.d/tetex-profile.sh
+ . /etc/profile.d/xinit.sh
+ . /etc/bash.bashrc

...


也尝试在grep命令中添加“source”单词... - gavenkoa
当你获取修改bash行为的所有文件列表时,你需要使用grep来查找它们中的**PATH=**模式... - gavenkoa
如上所述,请确保同时搜索 sourcebash --login -xv -c "echo" 2>&1 | grep -E " (\.|source) " - Alexander Klimetschek
值得注意的是,他的答案提供了登录时由bash获取的所有文件。您仍然需要逐个查看它们,以查看哪些文件设置了PATH变量。您无法轻松地使用grep查找它(即PATH),因为该信息在bash -x输出的不同行上。 - Alexander Klimetschek
FYI。不适用于Windows WSL2(没有深入检查,只是复制并粘贴)。 - user5248982
显示剩余2条评论

7

您不应该让随意的系统管理员决定您的PATH中包含什么内容,您应该将其设置为您所需的PATH。您可以从以下步骤开始:

# POSIX way of getting the system's PATH to POSIX tools:
PATH=$(getconf PATH)   # Or /usr/bin/getconf PATH.

然后再加上您需要的任何内容,例如

PATH="$PATH:/usr/local/bin"
PATH="$PATH:/usr/local/sbin"
PATH="$PATH:$HOME/bin"

把这段代码放进你的 shell 的 .profile 或者等价的文件中。请注意,出于安全原因,你不应该将. 或可被所有人写入的目录添加到你的 PATH 路径中。

$ getconf PATH 的结果是 /bin:/usr/bin我不确定类似 /usr/X11R6/bin 这样的东西是什么,或者我是否仍然需要它们在我的路径中。有什么想法吗? - mbarrows
如果你不使用X11窗口系统(如xterm,firefox,acroread等),就不需要/usr/X11R6/bin。如果你不确定,请键入ls /usr/X11R6/bin以查看是否需要任何列出的可执行文件。我认为把它加入PATH也无妨。 - Jens

3

您可以随时查看$PATH中每个组件的目录内容,决定是否使用其中的程序。如果不使用这些程序,则很可能可以从$PATH中删除该目录而不会受到影响。如果该目录不存在,则完全可以安全地将其删除。

令人困惑的是,这些目录出现在您的配置文件和相关文件中。您应该检查~/.profile等文件。您还应该查看诸如/etc/profile之类的材料。

就我个人而言,我认为我掌控了我的$PATH。我根据自己的规则从头开始设置它,并选择我需要的目录。您无需接受系统管理员为您设置的路径,但不应轻易删除他们添加的PATH组件。但是,他们对于什么是理想的看法可能与您的不同。

唯一的长期不良影响可能是某些您使用的程序停止工作,因为它依赖于旧版本的$PATH中的某些内容。因此,在开始更改PATH之前,请记录您之前所拥有的内容 - 但不要害怕根据自己的需求调整PATH。


0

请检查您的/etc/profile文件,并根据您的操作系统版本检查/etc/profile.d/目录。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接