как установить переменные среды в рыбной раковине


91

Может кто-нибудь подскажите, пожалуйста, как правильно установить кучу переменных окружения в рыбной оболочке?

В моем файле .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команду в командной строке, я не вижу этой информации.

Ответы:


70

Объявляемые вами переменные хранятся в локальной области внутри вашей функции.

Использование:

set -g -x

Здесь " g" означает глобальный.


152

Используйте универсальные переменные

Если переменная должна совместно использоваться всеми текущими пользовательскими экземплярами Fish на текущем компьютере и сохраняться при перезапусках оболочки, вы должны использовать -Uили --universal:

set -Ux FOO bar

Использование setс -gили --globalне устанавливает постоянную переменную между экземплярами оболочки


Примечание :

Не добавляйте к универсальным переменным в config.fishфайле, потому что эти переменные будут становиться длиннее с каждым новым экземпляром оболочки. Вместо этого просто запустите set -Uxодин раз в командной строке. И он будет сохранен в файле .config/fish/fishd.MACHINE_ID, где MACHINE_IDобычно находится ваш MAC-адрес.


Мои переменные не были сохранены fishd.MACHINE_ID, а вместо этого были сохранены в~/.config/fish/fish_variables
Seanny123

моя переменная была сохранена в ~/.config/fish/fish_variablesubuntu 20.04
Игорь Маркелов

11

другой вариант - запустить:

export (cat env_file.txt |xargs -L 1)

где env_file.txt содержит строки формата VAR=VALUE

это дает преимущество сохранения переменных в формате, поддерживаемом другими оболочками и инструментами.


Если вы хотите избежать комментариев, вы можете: export (grep "^[^#]" .env |xargs -L 1)
Гильермо

10

Переменные среды в Fish

Я хотел бы добавить, что, хотя ответ @JosEduSol не является неправильным и помогает решить проблему OP, -gустанавливает только глобальную область видимости, в то время как-x вызывая экспорт указанной переменной среды в дочерние процессы.

Причина, по которой вышеуказанное не удается, заключается в том, что @cfpete устанавливает переменные env внутри функции, и область действия по умолчанию будет локальной для этой функции.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.