如何从鱼 $PATH 中永久删除一条路径?

How to remove permanently a path from the fish $PATH?

这个问题已经被问过,并在这里回答:https://superuser.com/a/940041/293429

但是,提供的解决方案:执行set -e PATH[<index-of-the-path-to-be-removed]只适用于运行实例,并不普遍有效。

执行该命令后,如果执行 echo $PATH 之前删除的路径将再次出现。

完全重置路径的一种方法是执行:set -U fish_user_paths,但我不清楚它的作用。

真正的诀窍是找出如何删除手动添加的路径并使其在全球范围内可用——而不仅仅是当前实例?

有两种方法可以做到这一点,哪一种有效取决于路径如何进入 $PATH。

可以通过例如将目录添加到 $PATH set PATH $PATH /some/dir。至少在默认情况下,PATH 是一个全局变量,也就是说它是per-session。这意味着要从 $PATH 中更改某些内容,或者将其从添加的位置删除(这很可能在 fish 之外,因为它继承了它),或者将 set -e 调用放在 ~/.config/fish/config 中。 fish 所以它会在每次启动时执行。

还有 $fish_user_paths,这是一个通用变量(意味着它在 fish 会话中携带相同的值并在它们之间同步)。在启动时以及每当修改 fish_user_paths 时,fish 都会将其添加到 $PATH 中。如果在此处添加了有问题的目录,请执行 set -e fish_user_paths[index] 一次(例如,在交互式会话中)。

set -e fish_user_paths 会删除整个变量(而 set -U fish_user_paths 会清除它)这也可以,但也会删除所有其他路径