fish - 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 自动添加(并且这些目录在我的系统上不存在!)。
解决方案
在网上看了一圈,这不是与壳有关的问题:鱼壳或任何其他壳。这是一个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
推荐阅读
- python - conda在“解决环境”时做了什么
- angular5 - 如何在 Angular 5 中创建加载器微调器
- c# - 是否可以在不创建视图模型的情况下返回模型和字符串?
- itext - 如何在 iText7 中为表格设置内部边框
- angular - 为组件设置多个 @Input() 值
- json - 解析json文件Angular 5 ngx-translate期间的Http失败
- reactjs - Redux 存储更新成功,但组件的 mapStateToProps 接收旧状态
- python - 是否可以将张量流数据集导出到文件
- azure - Azure 异地复制非常适合减少更新期间的停机时间
- java - Spring Security SAML:仅接受来自 IDP 的签名 SAML 响应消息