Ktoś mi powiedział, że:
BASH nie jest zmienną środowiskową, to zmienna powłoki
Co za różnica?
bash
command-line
environment-variables
Tom Brito
źródło
źródło
Odpowiedzi:
$BASH
jest zmienną lokalną, która jest poprawna tylko w bieżącej powłoce (bash).Zmienne środowiskowe, takie jak
$SHELL
obowiązujące w całym systemie. W bieżącej powłoce Bash$BASH
wskazuje ścieżkę wykonania bash , podczas gdy$SHELL
wskazuje powłokę zdefiniowaną jako domyślna (która może mieć tę samą wartość).Aby uzyskać wyjaśnienie zmiennych środowiskowych, zobacz Zmienne środowiskowe w Pomocy Ubuntu.
źródło
Zmienna środowiskowa jest globalnie dostępna w programie i programach potomnych. Zmienna powłoki jest dostępna tylko w bieżącej powłoce. Aby udostępnić zmienną powłoki jako zmienną środowiskową, użyj
export VARNAME
(bez dolara$
).Przykłady wyjaśnień:
Inny sposób zdefiniowania zmiennej środowiskowej:
źródło
export
niekoniecznie ustawia zmienną środowiskową. stackoverflow.com/questions/7411455/…export
ustawia zmienną środowiskową dla procesów potomnych. Wpis, który podlinkowałeś, nie jest sprzeczny z tą odpowiedzią. Czy możesz wyjaśnić, dlaczego uważasz, że jest on niewłaściwy?export
absolutnie ustaw zmienną środowiskowąJest różnica. Zmienne powłoki i zmienne środowiska wyjaśnią to lepiej, niż potrafię, ale oto fragment:
źródło
Zmienna powłoki: krótkoterminowa, stosowana tylko do bieżącego wystąpienia powłoki, nie dotyczy całego systemu
Zmienna środowiskowa: długotrwałe użytkowanie, ważny system na całym świecie, globalnie dozwolone
Zgodnie z konwencją Shell Variable mają swoją nazwę jako małe litery podczas Envn. Zmienne są zapisywane wielkimi literami
źródło
Aby odpowiedzieć na to pytanie, najpierw spróbuj zrozumieć zakres zmiennej.
Podczas tworzenia nowej zmiennej jak
SOME_ENV_VARIABLE="testing.txt"
to rezyduje wSHELL scope
, co oznacza, że może on być dostępny przez tego wystąpienia shell gdzie użytkownik jest zalogowany. Kiedy zmiana instancja na przykład po otwarciu nowego terminalu lub zmienić powłokę (na przykład ty przełącz nacsh
) nie możesz uzyskać dostępu do tej zmiennej.Gdy eksportujesz tę zmienną, tak jak
export SOME_ENV_VARIABLE
ta zmienna jest teraz dostępna w zakresie środowiska, oznacza to, że w takim przypadku, jeśli zmienisz powłokę, nadal będziesz mógł uzyskać dostęp do tej zmiennej. Spróbujmy zrozumieć na następującym przykładzie:Analogia: załóżmy, że masz mieszkanie z dwiema sypialniami i dzielisz je z innym współlokatorem. Dostęp do wspólnego obszaru może uzyskać każdy, ale nie twoje sypialnie, zmienna środowiskowa jest jak wspólny obszar, a zmienna skorupy jest jak sypialnia, jeśli chcesz coś we wspólnym obszarze, może być dostępny dla każdego, ale jeśli zatrzymasz go w sypialni, może to tylko być przez ciebie dostępnym.
Pamiętaj, że jeśli otworzysz nowy terminal, nie będziesz mieć dostępu do żadnej ze zmiennych, ponieważ zmieniasz to wystąpienie . W tym celu powinieneś dodać swoje zmienne do jednego
.profile
lub.bashrc
(jeśli używasz bash).źródło