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

Shell 如何在鱼壳中设置环境变量,shell,fish,Shell,Fish,谁能告诉我在鱼壳中设置一组环境变量的正确方法是什么 在我的.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时,我看不到这些信息 您声明的变量保存在函数

谁能告诉我在鱼壳中设置一组环境变量的正确方法是什么

在我的.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
时,我看不到这些信息

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

使用:

这里的“
g
”代表全球。

我想补充一点,虽然@JosEduSol的答案并不错误,并且确实有助于解决OP问题,
-g
只是将作用域设置为全局,而
-x
导致指定的环境变量导出到子进程

上述操作失败的原因是@cfpete正在函数内设置env vars,默认范围将是该函数的本地范围。

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

set -Ux FOO bar
set
-g
--global
一起使用不会在shell实例之间持久地设置变量


注意


不要附加到
config.fish
文件中的通用变量,因为这些变量会随着每个新的shell实例而变长。相反,只需在命令行中运行set
-Ux
。它将存储在文件
.config/fish/fishd.MACHINE\u ID
中,其中
MACHINE\u ID
通常是您的MAC地址。

另一个选项是运行:

export (cat env_file.txt |xargs -L 1)
其中env_file.txt包含格式为
VAR=VALUE


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

我的变量未保存在
fishd.MACHINE\u ID
中,但是我的变量被保存在ubuntu 20.04上的
~/.config/fish/fish_变量中,如果你想避免注释,你可以:
导出(grep“^[^#]”.env| xargs-L 1)
export (cat env_file.txt |xargs -L 1)