jak ustawić zmienne środowiskowe w rybiej muszli

91

Czy ktoś może mi powiedzieć, jaki jest prawidłowy sposób ustawienia zestawu zmiennych środowiskowych w skorupie ryby?

W moim pliku .config / fish / config.fish mam funkcję ustawiania moich zmiennych środowiskowych w ten sposób

function setTESTENV
      set -x BROKER_IP '10.14.16.216'
      set -x USERNAME 'foo'
      set -x USERPASS 'bar'
end 

kiedy piszę w wierszu poleceń setTESTENVi robię envw wierszu poleceń, nie widzę tych informacji.

cfpete
źródło

Odpowiedzi:

70

Deklarowane zmienne są przechowywane w zakresie lokalnym wewnątrz funkcji.

Posługiwać się:

set -g -x

Tutaj „ g” jest oznaczeniem globalnym.

JosEduSol
źródło
152

Użyj zmiennych uniwersalnych

Jeśli zmienna ma być współdzielona między wszystkimi instancjami ryb bieżącego użytkownika na bieżącym komputerze i zachowywana po ponownym uruchomieniu powłoki, należy użyć -Ulub --universal:

set -Ux FOO bar

Używanie setz -glub --globalnie ustawia zmiennej trwale między instancjami powłoki


Uwaga :

Nie dołączaj do zmiennych uniwersalnych w config.fishpliku, ponieważ zmienne te będą się wydłużać z każdą nową instancją powłoki. Zamiast tego po prostu uruchom set -Uxraz w wierszu poleceń. Zostanie on zapisany w pliku .config/fish/fishd.MACHINE_ID, w którym MACHINE_IDzazwyczaj znajduje się Twój adres MAC.

Paolo Moretti
źródło
Moje zmienne nie zostały zapisane w fishd.MACHINE_ID, ale zamiast tego zostały zapisane~/.config/fish/fish_variables
Seanny123
moja zmienna została zapisana ~/.config/fish/fish_variablesna ubuntu 20.04
Igor Markelov
11

inną opcją jest uruchomienie:

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

gdzie env_file.txt zawiera wiersze formatu VAR=VALUE

ma to tę zaletę, że utrzymuje zmienne w formacie obsługiwanym przez inne powłoki i narzędzia

Ophir Yoktan
źródło
Jeśli chcesz uniknąć komentarzy, możesz: export (grep "^[^#]" .env |xargs -L 1)
Guillermo
10

Zmienne środowiskowe u ryb

Chciałbym dodać, że o ile odpowiedź @ JosEduSol nie jest błędna i pomaga rozwiązać problem OP, -gto tylko ustawia zakres na globalny, -xpowodując eksport określonej zmiennej środowiskowej do procesów potomnych.

Przyczyną niepowodzenia powyższego jest to, że @cfpete ustawia zmienne env wewnątrz funkcji, a domyślny zakres będzie lokalny dla tej funkcji.

Jorge Bucaran
źródło