Używam Red Hat Linux Enterprise 5; Zawsze używam polecenia eksportu, aby ustawić zmienne środowiskowe.
Czy istnieją inne sposoby ustawiania zmiennych środowiskowych i jakie są ich zalety / wady?
Używam Red Hat Linux Enterprise 5; Zawsze używam polecenia eksportu, aby ustawić zmienne środowiskowe.
Czy istnieją inne sposoby ustawiania zmiennych środowiskowych i jakie są ich zalety / wady?
Oto fragment strony podręcznika użytkownika Bash:
eksport [-fn] [nazwa [= słowo]] ...
eksport -p
Podane nazwy są oznaczone do automatycznego eksportu do środowiska później wykonywanych poleceń. Jeśli podano opcję -f, nazwy odnoszą się do funkcji ...
Jeśli potrzebujesz tylko zmiennej w bieżącym środowisku, nie musisz używać eksportu.
var=value
Edytować:
Bez eksportu: tylko bieżące środowisko. Z eksportem: obecne środowisko i środowiska potomne.
Oto demonstracja wpływu eksportu na dostępność zmiennej w środowisku potomnym i że zmiany w środowisku potomnym nie wpływają na element nadrzędny:
$ var1=123
$ export var2=456
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []
$ var3=789 bash -c 'echo "child [$var1] [$var2] [$var3]"; var1=111; var2=222; var3=333; echo "child [$var1] [$var2] [$var3]"'
child [] [456] [789]
child [111] [222] [333]
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []
Po pierwszym echo ( echo "parent..."
) można zobaczyć „123” i „456”, ponieważ oba var1
i var2
są aktywne w obecnym otoczeniu. Nie widzisz wartości, var3
ponieważ nie została jeszcze ustawiona.
Po wierszu rozpoczynającym się „ var3=...
” nie widzisz wartości, var1
ponieważ nie została ona wyeksportowana. Ci zrobić zobaczyć wartość var2
, ponieważ była eksportowana. Widać wartość var3
, ponieważ został ustawiony dla środowiska dziecka tylko .
( bash -c
jest równoważne uruchomieniu skryptu z zawartością argumentu do -c
opcji. Skrypt lub inny plik wykonywalny lub, w tym przypadku, argument do bash -c
staje się dzieckiem bieżącego środowiska, które w rezultacie jest oczywiście dzieckiem rodzic.)
W „skrypcie” wartości zmiennej są zmieniane. Teraz wyświetla te nowe wartości.
Po zakończeniu „skryptu” wykonywanie powraca do środowiska nadrzędnego (w tym przypadku wiersza polecenia). Po ostatnim echu zobaczysz oryginalne wartości, ponieważ zmiany wprowadzone w środowisku potomnym nie wpływają na element nadrzędny.
export
- udostępnienia zmiennych w tych środowiskach potomnych.Mówisz tak
Sposób, w jaki to sformułowałeś, brzmi tak, jakbyś naprawdę próbował zapytać, w jaki sposób utrzymujesz zmienną środowiskową. Aby to zrobić, musisz umieścić swoją
export VAR="foo"
instrukcję w pliku $ HOME / .bash_profile (jeśli używasz bash). Jeśli chcesz, aby ta zmienna środowiskowa zachowała się dla wszystkich użytkowników oprócz root, dodaj ją do / etc / profile. Jeśli chcesz go dodać także dla użytkownika root, ustaw go w /root/.bash_profile.Będzie to działać dla wszystkich powłok logowania, w których powłoką jest bash. W przypadku powłok, które nie są zalogowane, musisz użyć .bashrc. Nie mam wglądu w inne pociski: D
źródło
eksport jest najprostszym sposobem na zrobienie tego, więc dlaczego nie zostawić tego w tym miejscu?
źródło
FOO=BAR; executethisprogram
programexecutethisprogram
NIE BĘDZIE znać wartości zmiennejFOO
. Z drugiej strony, przy użyciu:FOO=BAR; export FOO; executethisprogram
Programexecutethisprogram
pozna wartość zmiennejFOO
.export FOO
to polecenie, które zaznacza zmienną,FOO
aby była dostępna dla procesów potomnych środowiska, w którym polecenie zostało wydane. Ten rodzic może być skryptem lub interaktywną powłoką.Możesz także zrobić coś takiego:
Na przykład:
wyjście w języku angielskim.
wyjście w języku polskim (jeśli jest dostępne).
W przeszłości nie można było eksportować VAL = val. Musiałeś
źródło
ls
na przykład) bez wpływu na wartość tej zmiennej w bieżącym (macierzystym) środowisku.ls
jest potomkiem procesu, z którego został uruchomiony. Jeśli piszęls
w wierszu polecenia, powłoka interaktywna jest rodzicem ils
dzieckiem. Jeśli mam skrypt, który używa,ls
skrypt jest rodzicem ils
dzieckiem.