如何在fish shell中的每个会话中永久设置env?

问题描述 投票:0回答:1

我安装

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)

全局不是指每个会话吗?有人可以帮助我吗?

linux shell rust-cargo fish bin
1个回答
13
投票

全局不就是指每个会话吗?

事实并非如此。它是“全球”而不是“本地”。来自鱼文档

全局变量特定于当前的 Fish 会话,除非使用 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 中,否则每次启动一条 Fish 时,它都会添加一个 $HOME/.cargo/bin,因此它会使变量膨胀。 回顾一下:

对于全局变量,将
    set
  • 语句放入config.fish
    对于通用变量,手动执行
  • 对于 $PATH,请使用 $fish_user_paths 进行自定义
© www.soinside.com 2019 - 2024. All rights reserved.