Как установить переменную окружения для одной команды в оболочке Fish? - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть переменная окружения GO111MODULE, которая установлена ​​в on в моем ~/.config/fish/config.fish:

> echo $GO111MODULE
on

После https://fishshell.com/docs/2.2/faq.html#faq-single-env, Я хотел бы установить ее на offдля одной команды.В качестве проверки работоспособности я попробовал команду echo следующим образом:

> env GO111MODULE=off echo $GO111MODULE
on

Однако я заметил, что это печатает on вместо off, как я и ожидал.Кто-нибудь может объяснить, почему это не работает?

1 Ответ

5 голосов
/ 24 сентября 2019

Когда вы вводите команду

env GO111MODULE=off echo $GO111MODULE

, переменная $GO111MODULE подставляется немедленно (в текущем контексте) до того, как env запустится или получит шанс установить переменную.Таким образом, env просто видит GO111MODULE=off echo on в качестве аргументов.

Чтобы увидеть эффект изменения среды, вам нужно организовать поиск envvar после того, как env установит его,Таким образом, что-то вроде:

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

покажет измененную переменную - один ' будет препятствовать расширению var текущей оболочкой, поэтому env получит 4 аргумента: GO111MODULE=off sh -c и echo $GO111MODULE.Затем он вызовет sh с двумя аргументами, что, в свою очередь, расширит переменную и запустит echo с одним off аргументом.

...