Możliwa duplikat:
Różnica między „a = b” i „export a = b” w bash
Trudno to przyznać, ale nigdy tak naprawdę nie zrozumiałem, co dokładnie export
robi zmienna środowiskowa. Wiem, że jeśli nie wyeksportuję zmiennej, czasami nie widzę jej w procesach potomnych, ale czasami wydaje się, że mogę. Co tak naprawdę się dzieje, kiedy mówię
export foo=5
a kiedy nie powinienem eksportować zmiennej?
bash
export
shell-script
Chas. Owens
źródło
źródło
export
instrukcji do .bashrc / .bash_profile w celu stworzenia trwałych zmiennych globalnych podobnych do$HOME
.Odpowiedzi:
Od
man bash
:źródło
Wyeksportowane zmienne są przekazywane do procesów potomnych, a nie eksportowane zmienne nie.
źródło
PYTHONPATH
), a następnie zauważając, że chociaż możesz,echo $PYTHONPATH
to nie jest rozpoznawane przez skrypty python lub bash, dopóki toexport
nie zrobisz$BASHPID
), a jednak można odczytać niewyportowane zmienne z powłoki nadrzędnej. Prosty dowód:x="y"; echo "$BASHPID: $x"; (echo "$BASHPID: $x")
Domyślam się, że jest to szczególny przypadek, który występuje, gdy proces potomny jest podpowłoką.Podczas używania
export
dodajesz zmienną do listy zmiennych środowiskowych powłoki, w której wywołano polecenie eksportu, a wszystkie zmienne środowiskowe powłoki są przekazywane do procesów potomnych, dlatego możesz jej użyć.Po zakończeniu powłoki środowisko jest zniszczone, dlatego zmienne środowiskowe są deklarowane i eksportowane przy logowaniu, na przykład w pliku .bashrc
źródło