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

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

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


person cfpete    schedule 02.09.2014    source источник


Ответы (4)


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

Использовать:

set -g -x

Здесь «g» - глобальный.

person JosEduSol    schedule 02.09.2014

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

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

set -Ux FOO bar

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


Примечание:

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

person Paolo Moretti    schedule 12.05.2015
comment
Мои переменные не были сохранены в fishd.MACHINE_ID, а были сохранены в ~/.config/fish/fish_variables - person Seanny123; 29.04.2020
comment
моя переменная была сохранена в ~/.config/fish/fish_variables на ubuntu 20.04 - person Igor Markelov; 02.05.2020

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

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

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

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

person Ophir Yoktan    schedule 20.12.2017
comment
Если вы хотите избежать комментариев, вы можете: export (grep "^[^#]" .env |xargs -L 1) - person Guillermo; 04.09.2020

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

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

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

person Jorge Bucaran    schedule 21.02.2015