首页 > 解决方案 > shell中的PATH获取神秘入口(鱼壳,ubuntu系统)

问题描述

我在 Ubuntu 系统上使用鱼壳。这个问题是关于$PATH我无意中设置的冗余。

当我输入echo $PATH时,我得到:

/opt/anaconda3/bin/ /opt/anaconda3/etc/fish/conf.d/ /opt/anaconda3/bin/ /opt/anaconda3/etc/fish/conf.d/ /usr/local/sbin /usr/local /bin /usr/sbin /usr/bin /sbin /usr/games /usr/local/games 。

多个烦恼:/opt/anaconda3/bin出现两次,显示一些不存在的目录:/usr/local/games /usr/games

我的/etc/login.defs内容如下:

ENV_PATH        PATH=/usr/local/bin:/usr/bin:/bin

所以冗余不是来自那里。当然,我在config.fish中的PATH设置为:

set -gx PATH /opt/anaconda3/bin/ (/opt/anaconda3/bin/conda info --root)/etc/fish/conf.d/ $PATH .

我的问题:除了在我的环境中设置的内容以及由/etc/login.defs传递给它的内容之外,鱼从哪里获得它的路径

更新:我更改为使用 fish_user_paths 变量,每个文档都摆脱了 /opt/anaconda3/bin 添加了两次。仍然 /usr/games/ 和 /usr/local/games 自动添加(并且这些目录在我的系统上不存在!)。

标签: fish

解决方案


在网上看了一圈,这不是与壳有关的问题:鱼壳或任何其他壳。这是一个Linux问题。内核在分叉 init 之前的某个地方读取 /etc/environment 文件并设置系统范围的默认路径。

在单一用户环境中,我们可以只编辑该文件——如果我们坚持的话。就个人而言,我在我的鱼配置文件中添加了几行以从路径中清除不存在的目录:

if set -l index (contains -i -- /usr/local/games $PATH) set --erase PATH[$index] end if set -l index (contains -i -- /usr/games $PATH) set --erase PATH[$index] end


推荐阅读