【问题标题】:How to set an environment variable for just one command in the Fish shell?如何为 Fish shell 中的一个命令设置环境变量?
【发布时间】:2019-09-24 19:41:40
【问题描述】:

我有一个环境变量GO111MODULE,在我的~/.config/fish/config.fish 中设置为on

> echo $GO111MODULE
on

https://fishshell.com/docs/2.2/faq.html#faq-single-env 之后,我想将它设置为off 以获得单个命令。作为健全性检查,我尝试了echo 命令,如下所示:

> env GO111MODULE=off echo $GO111MODULE
on

但是,我注意到这是打印on 而不是off,正如我所期望的那样。谁能解释为什么这不起作用?

【问题讨论】:

  • 试试:env GO111MODULE=off sh -c 'echo $GO111MODULE'

标签: environment-variables fish


【解决方案1】:

当你输入命令时

env GO111MODULE=off echo $GO111MODULE

变量$GO111MODULEenv 运行或有机会设置变量之前立即被替换(在当前上下文中)。所以 env 只是将GO111MODULE=off echo on 视为它的参数。

为了看到环境变化的效果,你需要安排在env设置之后进行envvar查找。所以像:

env GO111MODULE=off sh -c 'echo $GO111MODULE'

将显示更改的变量——它周围的单个' 将阻止当前shell 扩展变量,因此env 将获得4 个参数:GO111MODULE=offsh-cecho $GO111MODULE。然后它将使用两个 args 调用 sh,这将反过来 exapnd 变量并使用单个 off arg 运行 echo

【讨论】:

    【解决方案2】:

    替代方案:

     set -lx GO111MODULE off; echo $GO111MODULE
     echo $GO111MODULE
    

    设置本地环境变量,不幸的是为这个会话保留它,这可能不是你想要的。

    【讨论】:

      猜你喜欢
      • 2014-10-27
      • 2011-08-22
      • 2020-08-13
      • 2019-08-30
      • 2014-11-29
      • 1970-01-01
      • 1970-01-01
      • 2016-01-04
      • 2021-03-01
      相关资源
      最近更新 更多