如何为 Fish shell 中的一个命令设置环境变量?
How to set an environment variable for just one command in the Fish shell?
我有一个环境变量 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 echo $GO111MODULE
变量 $GO111MODULE
在 env
之前(在当前上下文中)立即被替换 运行 或有机会设置变量。所以 env 只是将 GO111MODULE=off echo on
视为其参数。
为了查看环境变化的效果,您需要在 env
设置它之后安排执行 envvar 查找 。所以像:
env GO111MODULE=off sh -c 'echo $GO111MODULE'
将显示更改后的变量 -- 它周围的单个 '
将阻止当前 shell 扩展变量,因此 env
将获得 4 个参数:GO111MODULE=off
sh
-c
和 echo $GO111MODULE
。然后它将使用两个参数调用 sh
,这将依次使用单个 off
参数扩展变量和 运行 echo
。
选择:
set -lx GO111MODULE off; echo $GO111MODULE
echo $GO111MODULE
设置本地环境变量,不幸的是,为本次会话保留了它,这可能不是您想要的。
我有一个环境变量 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 echo $GO111MODULE
变量 $GO111MODULE
在 env
之前(在当前上下文中)立即被替换 运行 或有机会设置变量。所以 env 只是将 GO111MODULE=off echo on
视为其参数。
为了查看环境变化的效果,您需要在 env
设置它之后安排执行 envvar 查找 。所以像:
env GO111MODULE=off sh -c 'echo $GO111MODULE'
将显示更改后的变量 -- 它周围的单个 '
将阻止当前 shell 扩展变量,因此 env
将获得 4 个参数:GO111MODULE=off
sh
-c
和 echo $GO111MODULE
。然后它将使用两个参数调用 sh
,这将依次使用单个 off
参数扩展变量和 运行 echo
。
选择:
set -lx GO111MODULE off; echo $GO111MODULE
echo $GO111MODULE
设置本地环境变量,不幸的是,为本次会话保留了它,这可能不是您想要的。