Jeg opprettet en miljøvariabel i ett terminalvindu og prøvde å ekko det i et annet terminalvindu. Det viste ingenting.

$TEST=hello 

Etter det eksporterte jeg det og prøvde igjen å echo det i et annet terminalvindu . resultatet var det samme som før.

export TEST 

men hvis jeg utfører den samme koden ved innloggingen (legger koden til ~/.profile fil) variabler kan brukes i hvilket som helst terminalvindu. Hva skjer her? Hva er forskjellen mellom å utføre en kode i en terminal og å utføre den samme ved påloggingen?

Svar

export lager en variabel til noe som vil bli inkludert i underordnede prosessmiljøer. Det påvirker ikke andre allerede eksisterende miljøer. Generelt er det ikke en måte å sette en variabel i en terminal og få den automatisk til å vises i en annen terminal. Miljøet er etablert for hver prosess alene.

Legger den til din .profile gjør det slik at miljøet ditt blir konfigurert til å inkludere den nye variabelen hver gang du logger inn. Så det blir ikke eksportert fra ett skall til et annet, men i stedet instruerer et nytt skall om å inkludere det når det setter opp det opprinnelige miljøet.

Svar

Hver prosess har flere attributter som prosessen kan angis individuelt og uavhengig av andre prosesser. Eksempler er ressursgrenser, umask, gjeldende katalog, miljøvariabler og noe mer. Ved prosessoppretting (ved hjelp av fork() systemanrop) arver barnet disse attributtene fra foreldrene. Etter dette kan barneprosessen sette disse attributtene vilkårlig. (Noen begrensninger gjelder, en prosess kan ikke øke hardressursgrensene eller endre den nåværende katalogen til en katalog som den ikke har tillatelse til.)

Bare noen få programmer endrer miljøvariablene, de fleste bryr seg ikke. Anta sistnevnte tilfelle. Så hvis en barneprosess skaper seg ytterligere barn, vil disse prosessene ha de samme miljøvariablene som besteforeldren. Og så videre.

Nå har et skall mange variabler som kan sees med set (i skjell av Bourne Shell-typen, ikke om C Shell). Disse variablene er ikke miljøvariabler med mindre de er export red. Miljøvariabler kan vises med env. Hvis du starter et program fra skallkommandolinjen, vil programmet arve miljøvariablene fra skallet. På samme måte for et program lansert fra et skallskript.

Derfor er det ved innlogging et skall som leser profildata (f.eks. ~/.profile) og arver dem til praktisk talt alle barn, barnebarn og så videre. Slik siver innstillinger for miljøvariabler ned fra påloggingsskallet eller påloggingsskriptet til alle andre programmer som er lansert i påloggingsøkten.

Jeg opprettet en miljøvariabel i ett terminalvindu og prøvde å ekko det i et annet terminalvindu. Det viste ingenting.

Av forklaringen ovenfor er dette det forventede resultatet. Endringer i miljøet til en prosess berører bare barn av denne prosessen som blir opprettet heretter, ikke eksisterende.

$TEST=hello

Dette vil neppe fungere uansett, med mindre variabel utvidelse er deaktivert eller $TEST allerede har en passende verdi. Hvis du vil tildele hello til variabel TEST, må du si TEST=hello : nei $).

Etter det eksporterte jeg det og prøvde igjen å echo det i et annet terminalvindu. resultatet var det samme som før.

Nok en gang er dette det forventede resultatet.

men hvis jeg utfører den samme koden ved innloggingen (legger koden til ~/.profile fil) kan variabler brukes i hvilket som helst terminalvindu.

Dette skyldes at skallet i terminalen er en etterkommer av skallet som leser miljøinnstillingene fra ~/.profile og dermed arvet disse innstillingene.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *