如何在 fish shell 的每个会话中永久设置 env?
How to permanently set env across every session in fish shell?
我安装了cargo
搭建环境。
我使用 cargo install exa
来安装 exa
(命令 ls
的替代方法)。
可执行文件放在$HOME/.cargo/bin
。
我使用 fish
shell set -gx PATH $PATH $HOME/.cargo/bin
,然后我可以在当前会话中使用命令 exa
。
但是当我打开一个新会话时,我无法执行exa
,除非再次set -gx ...
。
我查看选项 gx
:
--global -g (Make variable scope global)
--export -x (Export variable to subprocess)
global 不是指每次会话吗?有人可以帮我吗?
Doesnot global means every session?
没有。它是“全球”而不是“本地”。来自 the fish documentation:
Global variables are specific to the current fish session, and will never be erased unless explicitly requested by using 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
一次,交互,鱼会处理它。这是一个通用变量,但 fish 会在必要时注意将其添加到 $PATH(对于每个组件,它会检查它是否已经存在等等)。不要不要将它放入config.fish,否则它会在你每次开始一条鱼时添加一个$HOME/.cargo/bin,这样它就会使变量膨胀。
回顾一下:
- 对于全局变量,将
set
语句放入config.fish
- 通用变量,手动执行
- 对于 $PATH,使用 $fish_user_paths 进行自定义
我安装了cargo
搭建环境。
我使用 cargo install exa
来安装 exa
(命令 ls
的替代方法)。
可执行文件放在$HOME/.cargo/bin
。
我使用 fish
shell set -gx PATH $PATH $HOME/.cargo/bin
,然后我可以在当前会话中使用命令 exa
。
但是当我打开一个新会话时,我无法执行exa
,除非再次set -gx ...
。
我查看选项 gx
:
--global -g (Make variable scope global)
--export -x (Export variable to subprocess)
global 不是指每次会话吗?有人可以帮我吗?
Doesnot global means every session?
没有。它是“全球”而不是“本地”。来自 the fish documentation:
Global variables are specific to the current fish session, and will never be erased unless explicitly requested by using 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
一次,交互,鱼会处理它。这是一个通用变量,但 fish 会在必要时注意将其添加到 $PATH(对于每个组件,它会检查它是否已经存在等等)。不要不要将它放入config.fish,否则它会在你每次开始一条鱼时添加一个$HOME/.cargo/bin,这样它就会使变量膨胀。
回顾一下:
- 对于全局变量,将
set
语句放入config.fish - 通用变量,手动执行
- 对于 $PATH,使用 $fish_user_paths 进行自定义