如何在fish shell中设置环境变量

Posted

技术标签:

【中文标题】如何在fish shell中设置环境变量【英文标题】:how to set environment variables in fish shell 【发布时间】:2014-10-27 06:38:42 【问题描述】:

谁能告诉我在fish shell中设置一堆环境变量的正确方法是什么?

在我的 .config/fish/config.fish 文件中,我有一个像这样设置环境变量的函数

function setTESTENV
      set -x BROKER_IP '10.14.16.216'
      set -x USERNAME 'foo'
      set -x USERPASS 'bar'
end 

当我从命令提示符输入setTESTENV 并在命令行中执行env 时,我看不到这些信息。

【问题讨论】:

【参考方案1】:

您声明的变量保存在函数内的本地范围内。

用途:

set -g -x

这里的“g”是全局的。

【讨论】:

【参考方案2】:

Environment Variables in Fish

我想补充一点,虽然@JosEduSol 的回答并不正确并且确实有助于解决 OP 问题,但-g 只是将范围设置为全局,而-x 导致指定的环境变量被导出到子进程。

上述失败的原因是因为@cfpete 在函数内部设置了环境变量,而默认范围将是该函数的本地范围。

【讨论】:

【参考方案3】:

使用Universal Variables

如果变量必须在当前计算机上的所有当前用户 Fish 实例之间共享并且 在 shell 的重新启动时保留,您可以使用 -U--universal 设置它们。例如:

set -Ux FOO bar

set-g--global 一起使用不会在shell 实例之间永久设置变量。


注意

不要附加到config.fish 文件中的通用变量,因为这些变量会随着每个新的 shell 实例而变长。相反,只需在命令行运行一次 set -Ux

从 Fish 3.0 开始,通用变量将存储在文件 ~/.config/fish/fish_variables 中。在之前的版本中,它是~/.config/fish/fishd.MACHINE_ID,其中 MACHINE_ID 通常是 MAC 地址。

【讨论】:

【参考方案4】:

另一种选择是运行:

export (cat env_file.txt |xargs -L 1)

其中 env_file.txt 包含格式为 VAR=VALUE 的行

这样做的好处是将变量保持为其他 shell 和工具支持的格式

【讨论】:

如果您想避免使用 cmets,您可以:export (grep "^[^#]" .env |xargs -L 1)

以上是关于如何在fish shell中设置环境变量的主要内容,如果未能解决你的问题,请参考以下文章

检查环境变量是不是在 Unix shell 脚本中设置的简洁方法是啥?

怎样在Ubuntu中设置环境变量

从 Node.js 中设置全局环境变量

如何在 Netbeans 中设置环境变量?

如何在生产环境中设置 ASP.NET 5 环境变量

如何在 Jupyter notebook 中设置环境变量