我目前正在玩fish shell而我在围绕如何设置PATH
变量时遇到了一些麻烦。对于它的价值,我也使用oh-my-fish。
如果我回应当前的路径,我会得到:
➜ 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
查看~/.config/fish/config.fish
我看到以下一行
set PATH /usr/local/bin $PATH /Users/myname/.opam/system/bin
我的问题是(这个措辞可能反映了我对这个问题缺乏了解):在config.fish
被处理之前,PATH
变量集在哪里?即:/usr/local/bin
和/Users/myname/.opam/system/bin
之间的所有路径来自哪里?
答案 0 :(得分:63)
如official fish tutorial所述,您可以修改$fish_user_paths
通用变量。
从命令行运行以下命令:
set -U fish_user_paths /usr/local/bin $fish_user_paths
这会将/usr/local/bin
永久地添加到您的路径中,并且也会影响当前会话和所有未来的实例。
请勿将此行添加到config.fish
文件中,因为这会导致$fish_user_paths
随每个shell实例一起增长。
答案 1 :(得分:8)
与所有shell一样,fish从它启动的环境继承它的PATH。如何为登录shell设置这个在操作系统之间有所不同 - 例如,在Linux上,/etc/login.defs
控制所有登录的初始PATH集炮弹。我不知道这是如何在OS X上设置的。
接下来,与bash
或csh
一样,shell的初始化文件可能会改变路径。对于OS X上的fish,share/fish/config.fish
中的代码用于从标准OS X路径配置文件/etc/paths
和/etc/paths.d/*
加载路径。还有替代代码可以在Solaris上设置有用的路径。
还有一些代码可以从通用变量$fish_user_paths
中选取路径,即right way to add something to your PATH and have it reflected across all shells。
答案 2 :(得分:7)
从鱼的maintainers修改PATH
的推荐命令是:
如果要运行一次命令:
set -Ua fish_user_paths /path
如果要将命令添加到启动脚本中,这是幂等的:
contains /path $fish_user_paths; or set -Ua fish_user_paths /path
答案 3 :(得分:1)
1。枚举用户路径:
echo $fish_user_paths | tr " " "\n" | nl
2。永久添加新的bin路径:
set -ga fish_user_paths my_appended_path
3。按索引删除第7个bin搜索路径:(请参阅#1):
set —eg fish_user_paths[7]
答案 4 :(得分:1)
为了设置shell config file
的变量,我做了如下操作:
设置任何用户特定变量的主要命令是
set -Ua fish_user_paths /path/to/bin/directory/
set -Ux fish_user_paths /usr/local/bin
运行touch ~/.config/fish/config.fish
,除非它存在。
RUST
:set -Ua fish_user_paths $HOME/.cargo/bin
JAVA
:set -Ua fish_user_paths /path/to/java/bin
Node
和nvm
:确保随后正确安装了nvm
omf install nvm
set -gx NVM_DIR /path/to/nvm
Go
:set -Ua fish_user_paths /path/to/go/bin/
Scala
:set -Ua fish_user_paths /path/to/scala/bin/
Groovy
:set -Ua fish_user_paths /path/to/groovy/bin/
Maven
:set -Ua fish_user_paths /path/to/mvn/bin/
Gradle
:set -Ua fish_user_paths /path/to/groovy/bin/
最后,刷新您的终端。
在某些操作系统(例如OpenSuse)中的PS,请删除a
。