【问题标题】:how to set environment variables in fish shell如何在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 时,我看不到这些信息。

【问题讨论】:

    标签: shell fish


    【解决方案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)
          猜你喜欢
          • 1970-01-01
          • 2015-10-26
          • 1970-01-01
          • 1970-01-01
          • 2018-06-27
          • 2013-01-20
          • 1970-01-01
          • 1970-01-01
          • 2016-01-26
          相关资源
          最近更新 更多