【问题标题】:How to permanently set env across every session in fish shell?如何在鱼壳中的每个会话中永久设置环境?
【发布时间】:2021-03-28 14:35:17
【问题描述】:

我安装了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)

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

【问题讨论】:

  • 只是一个友好的邻里提醒,关于 Stack Overflow 的问题应该是关于“特定的编码、算法或语言问题。”您的问题可能更适合@987654321 @,但也请熟悉该网站的发帖规则。我建议在 mods 关闭它之前将其删除并移动它。如果您在投反对票之前自己做,则不会“反对”您的代表。

标签: linux shell fish bin cargo


【解决方案1】:

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

它没有。它是“全球”而不是“本地”。来自the fish documentation

全局变量特定于当前的鱼会话,除非使用 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 进行自定义

【讨论】:

    猜你喜欢
    • 2022-01-17
    • 1970-01-01
    • 2023-02-08
    • 1970-01-01
    • 2010-12-13
    • 1970-01-01
    • 2020-12-16
    • 2014-04-23
    相关资源
    最近更新 更多