Loin ympäristömuuttujan yhteen pääteikkunaan ja yritin toistaa sen toisessa pääteikkunassa. Se ei näyttänyt mitään.

$TEST=hello 

Sen jälkeen vietin sen ja yritin uudelleen echo sitä eri pääteikkunassa . tulos oli sama kuin aiemmin.

export TEST 

mutta jos suoritan saman koodin sisäänkirjautumisen yhteydessä (liitän koodin ~/.profile tiedosto) -muuttujia voidaan käyttää missä tahansa pääteikkunassa. Mitä täällä tapahtuu? Mitä eroa on koodin suorittamisen päätelaitteessa ja saman suorittamisen sisäänkirjautumisen yhteydessä?

Vastaus

export tekee muuttujasta jotain, joka sisällytetään lapsiprosessiympäristöihin. Se ei vaikuta muihin jo olemassa oleviin ympäristöihin. Yleensä ei ole tapaa asettaa muuttujaa yhteen päätelaitteeseen ja saada se automaattisesti näkyviin toiseen päätelaitteeseen, ympäristö luodaan kullekin prosessille itsenäisesti.

Lisäämällä se omaan .profile tekee siitä, että ympäristösi asetetaan sisällyttämään uusi muuttuja joka kerta, kun kirjaudut sisään. Siksi sitä ei viedä kuoresta toiseen, vaan se käskee uutta kuorta sisällyttämään se, kun se määrittää alkuperäisen ympäristön.

Vastaus

Jokaisella prosessilla on useita ominaisuuksia, jotka prosessi voi asettaa erikseen ja itsenäisesti muut prosessit. Esimerkkejä ovat resurssirajat, umask, nykyinen hakemisto, ympäristömuuttujat ja jotkut muut. Prosessin luomisen yhteydessä (fork() -järjestelmäkutsun avulla) lapsi perii nämä määritteet vanhemmalta. Tämän jälkeen lapsiprosessi voi asettaa nämä määritteet mielivaltaisesti. (Joitakin rajoituksia sovelletaan, prosessi ei saa lisätä kovien resurssien rajoituksia tai muuttaa nykyistä hakemistoa hakemistoksi, johon sillä ei ole exec-lupaa.)

Vain harvat ohjelmat muokkaavat ympäristömuuttujiaan, useimmat eivät vaivaudu Oletetaan, että jälkimmäinen tapaus. Joten jos lapsiprosessi luo itselleen uusia lapsia, näillä prosesseilla on samat ympäristömuuttujat kuin isovanhemmalla. Ja niin edelleen.

Nyt kuoressa on paljon muuttujia, jotka voidaan tarkastella set -ominaisuudella (Bourne Shell -tyyppisissä kuorissa, ei C-kuoresta). Nämä muuttujat eivät ole ympäristömuuttujia, ellei niitä ole > Toim. Ympäristömuuttujia voidaan tarkastella env -toiminnolla. Jos käynnistät ohjelman kuoren komentoriviltä, ohjelma perii ympäristömuuttujat kuoresta. shell-komentosarja.

Siksi sisäänkirjautumisen yhteydessä on kuori, joka lukee profiilitiedot (esim. ~/.profile) ja perii ne käytännössä kaikille lapsille, lapsenlapsille ja niin edelleen. Näin ympäristömuuttuja-asetukset siirtyvät sisäänkirjautumisruudusta tai kirjautumiskomentosarjasta kaikkiin muihin sisäänkirjautumisistunnon aikana käynnistettyihin ohjelmiin.

Loin ympäristömuuttujan yhden pääteikkunan ja yritti toistaa sitä toisessa pääteikkunassa. Se ei näyttänyt mitään.

Yllä olevan selityksen mukaan tämä on odotettu tulos. Muutokset prosessin ympäristössä vaikuttavat vain tämän prosessin tuleviin lapsiin, ei nykyisiin.

$TEST=hello

Tämä ei todennäköisesti toimi joka tapauksessa, ellei muuttujan laajennus ole käytössä tai $TEST on jo sopiva arvo. Jos haluat määrittää hello muuttujalle TEST, sinun on sanottava TEST=hello (huomautus : ei $).

Sen jälkeen vietin sen ja yritin uudelleen osoitteeseen echo se eri pääteikkunassa. tulos oli sama kuin aiemmin.

Tämä on jälleen kerran odotettu tulos.

mutta jos suoritan saman koodin kirjautumisen yhteydessä (liitän koodin tiedostoon ~/.profile), voidaan käyttää mitä tahansa pääteikkunaa.

Tämä johtuu siitä, että päätelaitteen kuori on kuoren jälkeläinen, joka luki ympäristöasetukset kohdasta ~/.profile ja siten peri nämä asetukset.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *