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)?
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)?
Odpowiedzi:
export VAR=value
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.
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.
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”