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

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

cfpete
источник

Ответы:

70

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

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

set -g -x

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

JosEduSol
источник
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 внутри функции, и область действия по умолчанию будет локальной для этой функции.

Хорхе Букаран
источник