我的 PATH 前缀不持久

我的 PATH 前缀不持久

我的 PATH 前缀不持久

我使用的是 Fish v3.2.0。根据文档,set -U fish_user_paths应该坚持不懈确保其中存储的目录应该在目录中的其他项目之前被查找小路。然而,它继承了小路来自其他地方(父 shell?某种启动文件?)和小路仅当我在每个 shell 实例中手动设置内容时才会发生更改。

暂时有效的方法

> echo $PATH
/usr/bin /bin /usr/sbin /sbin /usr/local/opt/[email protected]/libexec/bin/python

# This works, temporarily. It just doesn't persist.
> set -U fish_user_paths /usr/local/opt/[email protected]/libexec/bin
> set -SL fish_user_paths
$fish_user_paths: set in universal scope, unexported, with 1 elements
$fish_user_paths[1]: |/usr/local/opt/[email protected]/libexec/bin|

> which -a python
/usr/local/opt/[email protected]/libexec/bin/python
/usr/bin/python

什么不起作用

# The changes to fish_user_paths don't get picked up
# by new invocations or subshells.
> exec fish -li
> which -a python
/usr/bin/python
/usr/local/opt/[email protected]/libexec/bin/python

> set -SL fish_user_paths
$fish_user_paths: set in universal scope, unexported, with 1 elements
$fish_user_paths[1]: |/usr/local/opt/[email protected]/libexec/bin|

> set -SL PATH
$PATH: set in global scope, exported, a path variable with 5 elements
$PATH[1]: |/usr/bin|
$PATH[2]: |/bin|
$PATH[3]: |/usr/sbin|
$PATH[4]: |/sbin|
$PATH[5]: |/usr/local/opt/[email protected]/libexec/bin/python|

# Even trying to move the item doesn't seem to work.
> fish_add_path -Ppmg /usr/local/opt/[email protected]/libexec/bin/python
> echo $status
1

问题

在我看来,这些问题是相互关联的。我试图发现:

  1. 鱼从哪里来小路从我还没有明确设置它的时候开始?
  2. 为什么我不能保留我的小路跨 shell 实例进行更改?
  3. fish_add_path为什么我在尝试使用修改时收到错误小路直接地?

答案1

对于第一个问题,这可能取决于您的发行版,但/etc/environment如果您通过 PAM 登录则可能如此。请参阅

对于第二部分,尚不确定。

对于第三个,我相当肯定这是因为你将它指向了一个文件而不是目录,对吧?你的输出which -a python表明这是 python 可执行文件,但这是你要添加的目录。我猜只是一个简单的复制/粘贴错误。/usr/local/opt/[email protected]/libexec/bin/python

我相信 ...

fish_add_path -Ppmg /usr/local/opt/[email protected]/libexec/bin

或者

fish_add_path --move --path /usr/local/opt/[email protected]/libexec/bin
# Since the prepend and global should be default

... 应该管用。

一旦做到这一点,它对你问题的第二部分有帮助吗?

相关内容