如何在鱼壳中的每个会话中永久设置环境?

mar*_*olu 3 linux shell cargo bin fish

我安装了cargo构建环境。我cargo install exa用来安装exa(命令的替代品ls)。可执行文件放在$HOME/.cargo/bin. 我使用fishshell set -gx PATH $PATH $HOME/.cargo/bin,然后我可以exa在当前会话中使用命令。

但是当我打开一个新会话时,exa除非set -gx ...再次执行,否则我无法执行。

我查看选项gx

--global  -g     (Make variable scope global)
--export  -x  (Export variable to subprocess)
Run Code Online (Sandbox Code Playgroud)

全局不是意味着每个会话吗?有人可以帮我吗?

fah*_*aho 6

全局不是意味着每个会话吗?

它没有。它是“全球”而不是“本地”。从鱼文档

全局变量特定于当前的鱼会话,除非使用 set -e 明确请求,否则永远不会被删除。

一般来说,你想要的是把它set -gx放到 ~/.config/fish/config.fish 中。那是fish的配置文件。

Fish 也有“通用”变量,它们持久存储的,但它们与导出的交互很尴尬,所以我不推荐它。

特别是对于 $PATH,fish 提供了fish_user_paths它自动添加的变量,因此您可以运行

set -U fish_user_paths $fish_user_paths $HOME/.cargo/bin
Run Code Online (Sandbox Code Playgroud)

一次,交互式地,鱼会照顾它。这是一个通用变量,但 fish 会在必要时将其添加到 $PATH 中(对于每个组件,它会检查它是否已经存在等等)。千万不能把这个变成config.fish,否则它会在每次启动一个鱼一次添加一个$ HOME / .cargo / bin中,并因此将气球中的变量。

回顾一下:

  • 对于全局变量,将set语句放入 config.fish
  • 对于通用变量,手动执行
  • 对于 $PATH,使用 $fish_user_paths 进行自定义