Jaki jest najlepszy sposób ustawienia zmiennej środowiskowej w .bashrc?


Odpowiedzi:


16

Najlepszym sposobem

export VAR=value

Różnica

Robić

VAR=value

ustawia zmienną tylko na czas trwania skryptu ( .bashrcw tym przypadku). Procesy potomne (jeśli występują) skryptu nie będą miały zdefiniowanej zmiennej VAR, a po zakończeniu skryptu VARzniknie.

export VAR=value

jawnie dodaje VARsię do listy zmiennych przekazywanych do procesów potomnych. Chcesz tego spróbować? Otwórz powłokę, zrób

PS1="foo > "
bash --norc

Nowa powłoka otrzymuje domyślny monit. Jeśli zamiast tego zrobisz coś takiego

export PS1="foo > "
bash --norc

nowa powłoka otrzyma właśnie ustawiony monit.

Aktualizacja: jak zauważa Ian Kelling poniżej ustawione zmienne .bashrcpozostają w powłoce, która pochodzi .bashrc. Bardziej ogólnie, ilekroć powłoka pozyskuje skrypt (za pomocą source scriptnamepolecenia), zmienne ustawione w skrypcie utrzymują się przez cały okres użytkowania powłoki.


1
„ustawia zmienną tylko na czas trwania skryptu (w tym przypadku .bashrc)” To jest fałsz / wprowadzanie w błąd. Ustawione w ten sposób zmienne pozostają w interaktywnej powłoce, która odczytuje .bashrc.
Ian Kelling

PS1jest złym przykładem zmiennej eksportowanej jako zmienna środowiskowa. Ma to znaczenie tylko dla procesów potomnych, które są powłokami, i jest różnie interpretowane przez różne powłoki (np. Bash i myślnik). Najlepszą praktyką jest ustawienie go jako zwykłej zmiennej powłoki w pliku .bashrc. Lepsze przykłady zmiennych środowiskowych należą HOME, PATH, EDITOR, itd.
Anthony Geoghegan

10

Oba wydają się działać dobrze, ale użycie eksportu zapewni dostępność zmiennej dla podpowłok i innych programów. Aby to przetestować, wypróbuj to.

Dodaj te dwa wiersze do pliku .bashrc

TESTVAR="no export"
export MYTESTVAR="with export"

Następnie otwórz nową powłokę.

Uruchomiony echo $TESTVARi echo $MYTESTVARpokaże zawartość każdej zmiennej. Teraz w tej samej powłoce usuń te dwa wiersze z pliku .bashrc i uruchom, bashaby uruchomić podpowłokę.

Uruchomienie echo $TESTVARbędzie miało puste wyjście, ale uruchomione echo $MYTESTVARwyświetli „z eksportem”

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.