如何在鱼壳中设置环境变量


90

有人可以告诉我在鱼壳中设置一堆环境变量的正确方法是什么?

在我的.config / fish / config.fish文件中,我有一个设置环境变量的功能,如下所示

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

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

Answers:


70

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

使用:

set -g -x

这里的“ g”是全球性的。


151

使用通用变量

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

set -Ux FOO bar

在shell实例之间使用setwith-g--global不永久设置变量


注意事项

不要在config.fish文件中追加通用变量,因为对于每个新的Shell实例,这些变量将变得更长。相反,只需-Ux在命令行中运行一次set 。这将是存储在文件中.config/fish/fishd.MACHINE_ID,在那里MACHINE_ID通常是你的MAC地址。


我的变量未保存在中fishd.MACHINE_ID,而是保存到~/.config/fish/fish_variables
Seanny123

我的变量保存在~/.config/fish/fish_variablesUbuntu 20.04上
Igor Markelov

11

另一个选择是运行:

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

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

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


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

10

鱼中的环境变量

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

上面的方法失败的原因是因为@cfpete在函数内部设置了env vars,并且默认作用域是该函数的本地范围。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.