Si të vendosni variablat e mjedisit në Bash në Linux


Ka më shumë se një lloj ndryshoreje mjedisi në Linux. Mësoni se si t'i shihni ato, t'i krijoni ato për hyrje lokale dhe në distancë dhe t'i bëni ato t'i mbijetojnë rindezjes.

Si funksionojnë variablat e mjedisit

Kur hapni një dritare terminali dhe guaskën brenda saj, referohet një koleksion variablash për të siguruar që guaska është konfiguruar saktë. Këto variabla sigurojnë gjithashtu që çdo informacion të cilit mund t'i referohet dritarja dhe guaska e terminalit është i disponueshëm. Së bashku, këto variabla mbajnë cilësime që përcaktojnë mjedisin që gjeni brenda dritares së terminalit tuaj, deri në pamjen e vijës së komandës. Pra, natyrisht, ato quhen si variabla të mjedisit.

Disa variabla të mjedisit janë në të gjithë sistemin ose global. Të tjerat janë në të gjithë sesionin dhe mund të shihen vetëm nga ju. Të tjerët nuk mund t'i referojnë variablat e mjedisit tuaj të sesionit. Ekziston një grup i tretë i ndryshoreve mjedisore të përcaktuara brenda guaskës. Cilësimet e vendndodhjes, zonës kohore dhe të tastierës, grupi i drejtorive të kërkuara kur shell përpiqet të gjejë një komandë dhe redaktori juaj i paracaktuar, ruhen të gjitha në variablat e mjedisit të guaskës.

Ne do t'ju tregojmë se si të shihni variablat e mjedisit që ekzistojnë në sistemin tuaj dhe do të përshkruajmë se si të krijoni tuajin. Ne do t'ju tregojmë gjithashtu se si t'i bëni ato të disponueshme për proceset e fëmijëve dhe të jeni të qëndrueshëm gjatë rindezjeve.

Mjediset dhe Trashëgimia

Kur një predhë fillon, ajo kalon në një fazë inicializimi. Është në këtë pikë që lexon variablat e mjedisit që përcaktojnë mjedisin e guaskës.

Kur një program ose komandë lëshohet nga ajo guaskë - e njohur si një proces fëmijë - ai trashëgon mjedisin e procesit prind - por kini kujdes! Siç do ta shohim, ju mund të krijoni variabla që nuk shtohen në mjedisin tuaj, kështu që ato nuk do të trashëgohen nga një proces fëmijësh.

Nëse procesi fëmijë është një guaskë, ajo guaskë do të inicializohet nga grupi i vet, i freskët, i variablave. Pra, nëse ndryshoni vijën e komandës në guaskën aktuale dhe më pas hapni një guaskë fëmijë, guaska e fëmijës nuk do të trashëgojë vijën e modifikuar të komandës së prindit.

Variablat e Mjedisit Global

Sipas konventës, variablave të mjedisit u jepen emra me shkronja të mëdha. Këtu janë disa nga variablat globale të mjedisit dhe çfarë përfaqësojnë vlerat që ato përmbajnë:

  • SHELL: Emri i guaskës që do të hapet kur hapni një dritare terminali. Në shumicën e shpërndarjeve Linux, kjo do të jetë bash nëse nuk e ndryshoni atë nga parazgjedhja.
  • AFAT: Dritaret e terminalit janë në fakt emulime të një terminali harduer. Kjo përmban llojin e terminalit të harduerit që do të imitohet.
  • USER: Emri i përdoruesit të personit aktual që përdor sistemin.
  • PWD: Rruga drejt drejtorisë aktuale të punës.
  • OLDPWD: Drejtoria në të cilën ndodheshit përpara se të kalonit në drejtorinë aktuale të punës.
  • LS_COLORS: Lista e kodeve të ngjyrave të përdorura nga ls theksojnë lloje të ndryshme skedarësh.
  • MAIL: Nëse sistemi mail është konfiguruar në kompjuterin tuaj Linux (si parazgjedhje, nuk është), kjo do të mbajë shtegun për tek përdoruesi aktual kuti postare.
  • SHTEGU: Një listë e drejtorive që shell do të kërkojë për të gjetur ekzekutues të komandave.
  • LANG: Cilësimet e gjuhës, lokalizimit dhe kodimit të karaktereve.
  • HOME: Drejtoria kryesore e përdoruesit aktual.
  • _: Ndryshorja e mjedisit nënvizon (_) mban komandën e fundit që është shtypur.

Ne mund të shohim se për çfarë janë vendosur disa prej tyre duke përdorur asgjë më të sofistikuar se echo, e cila do të shkruajë vlerat në dritaren e terminalit. Për të parë vlerën që mbahet nga një ndryshore mjedisore, duhet të shtoni një shenjë dollari ($) në fillim të emrit të saj.

Një prekje e bukur është se mund të përdorni plotësimin e skedës për të plotësuar emrin e ndryshores së mjedisit për ju. Shkruani disa shkronja të emrit dhe shtypni Tab. Emri i ndryshores plotësohet nga shell. Nëse kjo nuk ndodh, do t'ju duhet të shkruani disa shkronja të tjera për të dalluar variablin e mjedisit nga komandat e tjera me emra që fillojnë me të njëjtat shkronja:

echo $SHELL
echo $LANG
echo $HOME
echo $PWD

Për të krijuar variablat tuaja të mjedisit global, shtoni ato në skedarin /etc/environment. Ju do të duhet të përdorni sudo për të modifikuar këtë skedar:

sudo gedit /etc/environment

Për të shtuar një variabël mjedisi, shkruani emrin e saj, një shenjë të barabartë (=) dhe vlerën që dëshironi të mbajë ndryshorja e mjedisit. Mos vendosni hapësirë para ose pas shenjës së barazimit (=). Emri i ndryshores së mjedisit mund të përmbajë shkronja, një nënvizim (_) ose numra. Megjithatë, karakteri i parë i një emri nuk mund të jetë një numër.

Nëse ka hapësira në vlerë, sigurohuni që të vendosni të gjithë vlerën në thonjëza (\).

Ruani skedarin dhe më pas dilni dhe hyni përsëri. Përdorni echo për të testuar nëse një variabël i ri ekziston dhe mban vlerën që keni vendosur:

echo $WEBSITE

Për shkak se është një variabël mjedisor global dhe i disponueshëm për të gjithë, përdoruesi mary mund t'i referohet variablit mjedisor kur ajo të regjistrohet më pas:

echo $WEBSITE

Për të parë të gjitha variablat e mjedisit menjëherë, shkruani printenv. Ka shumë rezultate, kështu që ka kuptim ta dërgoni atë përmes sort dhe më pas në less:

printenv | sort | less

Lista e renditur e variablave të mjedisit shfaqet për ne në pak.

Ne mund ta përcjellim daljen përmes grep për të kërkuar variabla mjedisore që lidhen me një temë të caktuar.

printenv | grep GNOME

Variablat e mjedisit të guaskës

Këto janë disa nga variablat e mjedisit të guaskës që përdoren në bash për të diktuar ose regjistruar sjelljen dhe funksionalitetin e tij. Disa nga vlerat përditësohen ndërsa përdorni terminalin. Për shembull, ndryshorja e mjedisit COLUMNS do të përditësohet për të pasqyruar ndryshimet që mund të bëni në gjerësinë e dritares së terminalit:

  • BASHOPTS: Opsionet e linjës së komandës që u përdorën kur u hap bash.
  • BASH_VERSION: Numri i versionit bash si një varg fjalësh dhe numrash.
  • BASH_VERSINFO: Versioni bash si shifër.
  • KOLONA: Gjerësia aktuale e dritares së terminalit.
  • DIRSTACK: Drejtoritë që janë shtuar në pirgun e drejtorive me anë të komandës pushd.
  • HISTFILESIZE: Numri maksimal i rreshtave të lejuar në skedarin  histori.
  • HISTSIZE: Numri i rreshtave të historisë të lejuara në memorie.
  • HOSTNAME: Emri i hostit të kompjuterit.
  • IFS: Ndarësi i brendshëm i fushës përdoret për të ndarë hyrjen në vijën e komandës. Si parazgjedhje, kjo është një hapësirë.
  • PS1: Ndryshorja e mjedisit PS1 mban përkufizimin për vijën kryesore, të paracaktuar dhe të komandës. Një grup shenjash të quajtura sekuenca ikjeje mund të përfshihen në përkufizimin e linjës suaj të komandës. Ato përfaqësojnë gjëra të tilla si host- dhe emri i përdoruesit, drejtoria aktuale e punës dhe koha.
  • PS2: Kur një komandë përfshin më shumë se një rresht dhe pritet më shumë hyrje, shfaqet linja e komandës dytësore. Ndryshorja e mjedisit PS2 mban përkufizimin e kësaj prompte dytësore, e cila, si parazgjedhje, është shenja më e madhe se (>).
  • SHELLOPTS: Opsionet e guaskës mund t'i vendosni duke përdorur opsionin set.
  • UID: Identifikuesi i përdoruesit të përdoruesit aktual.

Le të kontrollojmë disa nga këto variabla të guaskës:

echo $BASH_VERSION
echo $HOSTNAME
echo $COLUMNS
echo $HISTFILESIZE
echo $UID

Për hir të plotësisë, këtu janë shenjat që mund të përdorni në përkufizimet e vijës së komandës:

  • : Ora aktuale, e formatuar si HH:MM:SS.
  • \d: Data aktuale, e shprehur si ditë jave, muaj, datë.
  • : Një karakter me linjë të re.
  • \s: Emri i guaskës suaj.
  • \W: Emri i drejtorisë tuaj aktuale të punës.
  • \w: Rruga për në drejtorinë tuaj aktuale të punës.
  • \u: Emri i përdoruesit të personit që është identifikuar.
  • \h: Emri i hostit të kompjuterit.
  • \#: Çdo komandë brenda një shell është e numëruar. Kjo ju lejon të shihni numrin e komandës në vijën tuaj të komandës. Ky nuk është i njëjtë me numrin që komanda do të ketë në listën histori.
  • \$: Vendos karakterin përfundimtar të kërkesës në një shenjë dollari ($) për një përdorues të rregullt dhe një simbol hash (#) për përdoruesin rrënjë. Kjo funksionon duke kontrolluar UID-në e përdoruesit. Nëse është zero, përdoruesi është root.

Do të gjeni përkufizimin e ndryshores tuaj të mjedisit PS1 në skedarin tuaj .bashrc.

Krijimi i variablave të mjedisit të sesionit

Për të krijuar variabla mjedisi për përdorimin tuaj, shtoni ato në fund të skedarit tuaj .bashrc. Nëse dëshironi t'i keni të disponueshme variablat e mjedisit për seancat në distancë, si p.sh. lidhjet SSH, do t'ju duhet t'i shtoni ato edhe në skedarin tuaj .bash_profile.

Formati i përkufizimit të ndryshores së mjedisit është i njëjtë për të dy skedarët. Për të shtuar një përkufizim në skedarin tuaj .bash_profile, shkruani këtë në drejtorinë tuaj home:

gedit .bashrc

Ne kemi shtuar një variabël mjedisi të quajtur INHERITED_VAR. Vini re fjalën eksport në fillim të rreshtit.

Ruani dhe mbyllni skedarin tuaj pasi të keni përfunduar redaktimi. Mund të dilni dhe të hyni përsëri, ose mund të bëni që guaska të rilexojë skedarin .bash_profile duke përdorur komandën dot (.) si kjo:

. .bashrc

Tani, le të krijojmë një variabël mjedisi në vijën e komandës:

LOCAL_VAR="This session only"

Nëse përdorim echo, mund të shohim se të dy variablat e mjedisit janë të aksesueshme për ne:

echo $LOCAL_VAR
echo $INHERITED_VAR

Do të vini re se përkufizimi i ndryshores së mjedisit INHERITED_VAR kishte fjalën eksport në fillim të rreshtit. Kjo do të thotë se variabla e mjedisit do të trashëgohet nga proceset fëmijë të guaskës aktuale. Nëse nisim një tjetër duke përdorur komandën bash, mund t'i kontrollojmë përsëri dy variablat, nga brenda guaskës së fëmijës:

bash
echo $LOCAL_VAR
echo $INHERITED_VAR

Siç mund ta shihni, INHERITED_VAR është i aksesueshëm në guaskën e fëmijëve, por LOCAL_VAR jo. Ne thjesht marrim një vijë të zbrazët.

Megjithëse eksporti shton pjesën e ndryshores mjedisore në mjedisin që trashëgon fëmija, INHERITED_VAR nuk është një variabël mjedisor global. Për shembull, përdoruesi mary nuk mund ta referojë atë:

echo $INHERITED_VAR

Për të mbyllur sesionin bash të fëmijës tonë, ne përdorim dalje:

exit

Mjediset e trashëguara ndikojnë gjithashtu në skriptet. Këtu është një skript i thjeshtë që shkruan vlerat e tre variablave tanë të mjedisit në dritaren e terminalit:

#!/bin/bash

echo "WEBSITE" $WEBSITE
echo "LOCAL_VAR" $LOCAL_VAR
echo "INHERITED_VAR" $INHERITED_VAR

Kjo u ruajt në një skedar të quajtur envtest.sh dhe më pas u bë i ekzekutueshëm me sa vijon:

chmod +x envtest.sh

Kur ekzekutojmë skriptin, ai mund të ketë akses në dy nga tre variablat e mjedisit:

./envtest.sh

Skripti mund të shohë ndryshoren globale të mjedisit WEBSITE dhe ndryshoren e mjedisit të eksportuar INHERITED_VAR. Ai nuk mund të hyjë në LOCAL_VAR, edhe pse skripti po ekzekutohet në të njëjtën guaskë ku është krijuar ndryshorja.

Nëse kemi nevojë, mund të eksportojmë një variabël mjedisi nga linja e komandës. Ne do ta bëjmë këtë në LOCAL_VAR tonë dhe më pas do ta ekzekutojmë sërish skriptin:

export LOCAL_VAR
./envtest.sh

Variabla e mjedisit është shtuar në mjedisin e guaskës aktuale, dhe kështu shfaqet në mjedisin që trashëgohet nga skripti. Skripti mund t'i referohet edhe asaj ndryshoreje mjedisore.

Lidhjet në distancë

Variablat globale të mjedisit janë të aksesueshme për seancat e hyrjes në distancë, por nëse dëshironi që variablat e mjedisit tuaj të përcaktuar lokalisht të disponohen nga distanca, duhet t'i shtoni ato në skedarin tuaj .bash_profile. Mund të vendosni të njëjtën variabël mjedisi në skedarët .bashrc dhe .bash_profile, me vlera të ndryshme. Kjo mund të merret nga një skenar, të themi, për të modifikuar sjelljen e tij për njerëzit që përdorin sistemin në nivel lokal ose në distancë.

(Në rrezikun e ngatërrimit të çështjeve, ekziston gjithashtu një skedar .profile. Ai gjithashtu mund të mbajë përkufizime të ndryshoreve të mjedisit. Megjithatë, skedari .profile nuk lexohet nëse < Skedari.bash_profile është i pranishëm. Pra, gjëja më e sigurt për të bërë—dhe mënyra në përputhje me bash—është përdorimi i skedarit .bash_profile.)

Për të modifikuar skedarin .bash_profile, do të përdorim përsëri gedit:

gedit .bash_profile

Ne do të shtojmë të njëjtën ndryshore mjedisore me të njëjtën vlerë që kemi përdorur më parë.

Ruani ndryshimet tuaja dhe mbyllni gedit.

Në një kompjuter tjetër, ne do të bëjmë një lidhje SSH me kompjuterin testues.

ssh dave@howtogeek.local

Pasi të jemi lidhur, do ta ekzekutojmë skriptin edhe një herë:

./envtest.sh

Skedari .bash_profile është lexuar si pjesë e inicializimit të hyrjes në distancë dhe ndryshorja e mjedisit INHERITED_VAR është e aksesueshme për ne dhe skriptin.

Çrregullimi i një variabli të mjedisit

Për të çaktivizuar një variabël mjedisi, përdorni komandën unset. Nëse çaktivizojmë variablin global të mjedisit, WEBSITE dhe variablin e eksportuar të mjedisit, INHERITED_VAR, ato nuk do të jenë më të disponueshme në vijën e komandës, as në proceset e fëmijëve:

unset WEBSITE
unset INHERITED_VAR
./envtest.sh
echo $WEBSITE

Një pikë për t'u theksuar është se kjo vetëm ndryshon disponueshmërinë e variablave globale të mjedisit për ju në këtë sesion. Një person tjetër që është identifikuar njëkohësisht do të jetë ende në gjendje të hyjë në shembullin e tij të asaj ndryshoreje mjedisore globale. Shembulli i tij u inicializua dhe u lexua nga skedari /etc/environment gjatë procesit të tij të identifikimit dhe është i pavarur nga kopja e ndryshores nga kushdo tjetër.

Si shembull, përdoruesi mary mund të hyjë ende në variablin e mjedisit WEBSITE dhe të lexojë vlerën e tij, edhe pse përdoruesi dave e ka çaktivizuar atë në seancën e tij:

echo $WEBSITE

Kontrolli i Mjedisit

Variablat e mjedisit mund të përdoren për t'i lënë skriptet dhe aplikacionet të dinë se si duhet të sillen. Ato mund të përdoren për të ruajtur cilësimet ose sasi të vogla të dhënash. Për shembull, një skript mund të plotësojë një mjedis me një vlerë që mund të referohet nga skriptet e tjera pa pasur nevojë t'i shkruajë ato në një skedar.

RELATED: Best Linux Laptops for Developers and Enthusiasts