Czy podczas konfigurowania zmiennej .bashrc
należ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 .bashrc
należ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 ( .bashrc
w tym przypadku). Procesy potomne (jeśli występują) skryptu nie będą miały zdefiniowanej zmiennej VAR, a po zakończeniu skryptu VAR
zniknie.
export VAR=value
jawnie dodaje VAR
się 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 .bashrc
pozostają w powłoce, która pochodzi .bashrc
. Bardziej ogólnie, ilekroć powłoka pozyskuje skrypt (za pomocą source scriptname
polecenia), zmienne ustawione w skrypcie utrzymują się przez cały okres użytkowania powłoki.
PS1
jest 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 $TESTVAR
i echo $MYTESTVAR
pokaże zawartość każdej zmiennej. Teraz w tej samej powłoce usuń te dwa wiersze z pliku .bashrc i uruchom, bash
aby uruchomić podpowłokę.
Uruchomienie echo $TESTVAR
będzie miało puste wyjście, ale uruchomione echo $MYTESTVAR
wyświetli „z eksportem”