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实例一起增长.
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的维护者那里推荐的修改命令是:
如果你想运行一次命令:
set -Ua fish_user_paths /path
Run Code Online (Sandbox Code Playgroud)
如果要向启动脚本添加命令,这是幂等的:
contains /path $fish_user_paths; or set -Ua fish_user_paths /path
Run Code Online (Sandbox Code Playgroud)
像所有shell一样,fish从它启动的环境继承它的PATH.如何为登录shell设置它们在操作系统之间有所不同 - 例如,在Linux上/etc/login.defs
控制所有登录shell的初始PATH集.我不知道这是如何在OS X上设置的.
接下来,与bash
or 一样csh
,shell的初始化文件可能会改变路径.有关OS X鱼,有代码share/fish/config.fish
来加载从标准OS X路径配置文件的路径/etc/paths
和/etc/paths.d/*
.在Solaris上设置有用路径的替代代码.
还有一些代码可以从通用变量中获取路径$fish_user_paths
,这是向PATH添加内容并将其反映在所有shell中的正确方法.
1.枚举用户路径:
\necho $fish_user_paths | tr " " "\\n" | nl\n
Run Code Online (Sandbox Code Playgroud)\n2. 永久附加新的 bin 路径:
\nset -ga fish_user_paths my_appended_path\n
Run Code Online (Sandbox Code Playgroud)\n3. 按索引删除第 7 个 bin 搜索路径:(参见 #1):
\nset \xe2\x80\x94eg fish_user_paths[7]\n
Run Code Online (Sandbox Code Playgroud)\n
与我合作的方式:
在您~/.config/fish/config.fish
添加以下行:
set -gx PATH /path/to/dir1 /path/to/dir2 $PATH
这会将这些目录附加到您的 $PATH 环境变量中。