用鱼壳修改PATH

Pay*_*ian 37 shell environment-variables fish

我现在正在玩鱼壳,我在绕PATH变量设置方面遇到了一些麻烦.对于它的价值,我也在使用哦 - 我的鱼.

如果我回应当前的路径,我得到:

? fish echo $PATH
/usr/local/bin /usr/bin /bin /usr/sbin /sbin /usr/local/bin /opt/X11/bin /usr/texbin /Users/myname/.opam/system/bin
Run Code Online (Sandbox Code Playgroud)

看着~/.config/fish/config.fish我看到以下一行

set PATH /usr/local/bin $PATH /Users/myname/.opam/system/bin
Run Code Online (Sandbox Code Playgroud)

我的问题是(这个措辞可能反映了我对这个问题缺乏了解):在config.fish处理之前,PATH变量集在哪里?即:所有路径/usr/local/bin/Users/myname/.opam/system/bin来自哪里?

Kas*_*per 80

官方鱼教程中所述,您可以修改$fish_user_paths通用变量.

从命令行运行以下一次:

set -U fish_user_paths /usr/local/bin $fish_user_paths
Run Code Online (Sandbox Code Playgroud)

这将/usr/local/bin永久地添加到您的路径中,并且还将影响当前会话和所有将来的实例.

不要将此行添加到您的config.fish文件中,因为这会导致$fish_user_paths随每个shell实例一起增长.

  • 不要将它添加到您的fish_config文件中!它应该作为命令执行. (7认同)
  • `-U` 不是必需的,因为 `fish_user_paths` 已经是通用的。 (6认同)
  • 更容易使用的 shell 就到此为止了!它并没有让这个骗局变得不再那么混乱。嘿,至少你会得到一个更漂亮的提示。 (3认同)
  • 由于fish 3.x PATH不会增长,因此fish检查PATH中是否存在来自fish_user_paths的任何特定路径,如果不存在,则进行-前缀,如果是,则将其删除并进行前缀。 (2认同)

Max*_*ian 76

从2021 年 3 月发布的fish 3.2.0 开始,规范的答案是:

fish_add_path /opt/mycoolthing/bin
Run Code Online (Sandbox Code Playgroud)

鱼 < 3.2.0 的现有答案:

PATH从fish的维护者那里推荐的修改命令是:

  1. 如果你想运行一次命令:

    set -Ua fish_user_paths /path
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如果要向启动脚本添加命令,这是幂等的:

     contains /path $fish_user_paths; or set -Ua fish_user_paths /path
    
    Run Code Online (Sandbox Code Playgroud)

  • @马克西米利安谢谢!这个答案的第二部分确实帮助我解决了钓鱼会话启动缓慢的问题。我一直在使用类似于 config.fish 文件中的第一个命令的命令。https://github.com/fish-shell/fish-shell/issues/6136 (2认同)

Zan*_*hey 9

像所有shell一样,fish从它启动的环境继承它的PATH.如何为登录shell设置它们在操作系统之间有所不同 - 例如,在Linux上/etc/login.defs控制所有登录shell的初始PATH集.我不知道这是如何在OS X上设置的.

接下来,与bashor 一样csh,shell的初始化文件可能会改变路径.有关OS X鱼,有代码share/fish/config.fish来加载从标准OS X路径配置文件的路径/etc/paths/etc/paths.d/*.在Solaris上设置有用路径的替代代码.

还有一些代码可以从通用变量中获取路径$fish_user_paths,这是向PATH添加内容并将其反映在所有shell中正确方法.


jor*_*jun 6

1.枚举用户路径:

\n
echo $fish_user_paths | tr " " "\\n" | nl\n
Run Code Online (Sandbox Code Playgroud)\n

2. 永久附加新的 bin 路径:

\n
set -ga fish_user_paths my_appended_path\n
Run Code Online (Sandbox Code Playgroud)\n

3. 按索引删除第 7 个 bin 搜索路径:(参见 #1):

\n
set \xe2\x80\x94eg fish_user_paths[7]\n
Run Code Online (Sandbox Code Playgroud)\n

  • 试过这个。必须使用“set --erase Fish_user_paths[1]”才能工作。在擦除之前错过了一个破折号,并且“-g”显然不是当前版本中的选项。 (3认同)

Tar*_*eed 6

与我合作的方式:

在您~/.config/fish/config.fish添加以下行:

set -gx PATH /path/to/dir1 /path/to/dir2 $PATH 这会将这些目录附加到您的 $PATH 环境变量中。

  • 这不会添加目录,而是将目录添加到 PATH 之前。要附加它们,请使用“set -gx PATH $PATH /path/to/dir” (3认同)