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

11

Czy podczas konfigurowania zmiennej .bashrcnależy tego użyć?

export VAR=value

Czy to wystarczy?

VAR=value

Jaka jest dokładnie różnica (jeśli istnieje)?

Flávio Amieiro
źródło

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.

agnul
źródło
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”

Mike H.
źródło