Odpowiedzi:
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
Zawsze używam polecenia eksportu do ustawienia zmiennej środowiskowej
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
eksport jest najprostszym sposobem na zrobienie tego, więc dlaczego nie zostawić tego w tym miejscu?
export VARIABLE=value # for Bourne, bash, and similar shells
setenv VARIABLE value # for csh and similar shells
FOO=BAR; executethisprogram
program executethisprogram
NIE BĘDZIE znać wartości zmiennej FOO
. Z drugiej strony, przy użyciu: FOO=BAR; export FOO; executethisprogram
Program executethisprogram
pozna wartość zmiennej FOO
.
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:
VAR=val application
Na przykład:
LANG=C ls --help
wyjście w języku angielskim.
LANG=pl_PL ls --help
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ś
VAL=val; export VAL
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 i ls
dzieckiem. Jeśli mam skrypt, który używa, ls
skrypt jest rodzicem i ls
dzieckiem.