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

cfp*_*ete 74 shell fish

有人可以告诉我在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 
Run Code Online (Sandbox Code Playgroud)

当我从命令提示符键入setTESTENVenv在命令行中执行a 时,我看不到这些信息.

Pao*_*tti 113

使用通用变量

如果变量必须在当前计算机上的所有当前用户fish实例之间共享,并且在重新启动 shell时保留,则必须使用-U--universal:

set -Ux FOO bar
Run Code Online (Sandbox Code Playgroud)

使用set带有-g--global不持久设置壳实例之间的变量

  • 我的变量保存在 ubuntu 20.04 上的 `~/.config/fish/fish_variables` 中 (3认同)
  • 我的变量没有保存在 `fishd.MACHINE_ID` 中,而是保存到 `~/.config/fish/fish_variables` 中 (2认同)
  • 这是一个可怕的答案。通用变量永远不应该用于环境变量。通用变量也不应用于每次启动 Fish shell 时都会更改的值,或者对于并发运行的 shell 可能不同的值。我不敢相信这个答案得到了这么多的支持。 (2认同)

Jos*_*Sol 60

您声明的变量保留在函数内的局部范围内.

使用:

set -g -x
Run Code Online (Sandbox Code Playgroud)

这里" g"适用于全球.


Jor*_*ran 9

鱼类环境变量

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

上述失败的原因是因为@cfpete在函数内设置env变量,默认范围将是该函数的本地范围.


Oph*_*tan 8

另一个选择是运行:

export (cat env_file.txt |xargs -L 1)
Run Code Online (Sandbox Code Playgroud)

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

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

  • 如果你想避免注释,你可以: `export (grep "^[^#]" .env |xargs -L 1)` (4认同)