Како подесити варијабле окружења у Басху на Линук-у

Постоји више од једне врсте променљивих окружења на Линук-у. Научите како да их видите, креирате их за локалне и удаљене пријаве и учините да преживе поновно покретање.

Како функционишу варијабле окружења

Када покренете прозор терминала и шкољка у њој, позива се на колекцију варијабли како би се осигурало да је љуска исправно конфигурисана. Ове варијабле такође осигуравају да су све информације на које прозор терминала и шкољка можда треба да упућују доступне. Заједно, ове варијабле садрже поставке које дефинишу окружење које ћете пронаћи унутар прозора терминала, све до изгледа командне линије. Дакле, наравно, они се називају варијаблама окружења.

Неке варијабле окружења су системске или глобалне. Други су на нивоу целе сесије и можете их видети само ви. Други не могу референцирати ваше променљиве окружења сесије. Постоји трећи скуп променљивих окружења дефинисаних унутар љуске. Ваша подешавања локације, временске зоне и тастатуре, скуп директоријума који се претражују када љуска покуша да пронађе команду и ваш подразумевани уређивач, сви су ускладиштени у варијаблама окружења љуске.

Показаћемо вам како да видите променљиве окружења које постоје на вашем систему, а ми ћемо описати како да креирате сопствене. Такође ћемо вам показати како да их учините доступним подређеним процесима и да буду упорни током поновног покретања.

Окружење и наслеђе

Када се љуска покрене, она пролази кроз фазу иницијализације. У овом тренутку чита променљиве окружења које дефинишу окружење љуске.

Када се програм или команда покрене из те љуске—познате као подређени процес—она наслеђује окружење родитељског процеса—али пазите! Као што ћемо видети, можете креирати променљиве које се не додају вашем окружењу, тако да их неће наследити подређени процес.

Ако је подређени процес шкољка, та шкољка ће се иницијализовати из сопственог, свежег скупа променљивих. Дакле, ако промените командни редак у тренутној љусци, а затим покренете подређену љуску, подређена љуска неће наследити измењени командни редак надређене.

Глобалне варијабле окружења

По конвенцији, променљиве окружења добијају имена великим словима. Ево неких глобалних променљивих окружења и шта представљају вредности које оне садрже:

СХЕЛЛ: Име љуске која ће се покренути када отворите прозор терминала. На већини Линук дистрибуција, ово ће бити басх осим ако га нисте променили са подразумеваног.
ПОЈАМ: Прозори терминала су заправо емулације хардверског терминала. Ово садржи тип хардверског терминала који ће бити емулиран.
КОРИСНИК: Корисничко име особе која тренутно користи систем.
ПВД: Путања до тренутног радног директоријума.
ОЛДПВД: Директоријум у којем сте били пре преласка на тренутни радни директоријум.
ЛС_ЦОЛОРС: Листа кодова боја које користи лс означите различите типове датотека.
ПОШТА: Ако је систем поште постављен на вашем Линук рачунару (подразумевано није), ово ће задржати путању до поштанског сандучета тренутног корисника.
ПАТХ: Листа директоријума кроз које ће шкољка претраживати да би пронашла извршне команде.
ЛАНГ: Подешавања језика, локализације и кодирања знакова.
ХОМЕ: Почетни директоријум тренутног корисника.
_: Променљива окружења за доњу црту (_) садржи последњу укуцану команду.

  5 најбољих Линук дистрибуција за игре у 2024

Можемо видети шта су неки од њих спремни да користе ништа софистицираније од еха, што хоће упишите вредности у прозор терминала. Да бисте видели вредност коју држи променљива окружења, потребно је да додате знак долара ($) на почетак њеног имена.

Леп додир је што можете користити завршетак картице да попуните име променљиве окружења за вас. Унесите неколико слова имена и притисните Таб. Име променљиве употпуњује љуска. Ако се то не догоди, мораћете да унесете још неколико слова да бисте разликовали променљиву окружења од других команди са именима која почињу тим истим словима:

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

Да бисте креирали сопствене глобалне променљиве окружења, додајте их у /етц/енвиронмент датотеку. Мораћете да користите судо да бисте уредили ову датотеку:

sudo gedit /etc/environment

Да бисте додали променљиву окружења, откуцајте њено име, знак једнакости (=) и вредност коју желите да променљива окружења држи. Немојте стављати размак испред или иза знака једнакости (=). Име променљиве окружења може да садржи слова, доњу црту (_) или бројеве. Међутим, први знак имена не може бити број.

Ако у вредности има размака, обавезно ставите целу вредност у наводнике (“).

Сачувајте датотеку, а затим се одјавите и поново пријавите. Користите ехо да бисте тестирали да ли нова променљива постоји и да садржи вредност коју сте поставили:

echo $WEBSITE

Пошто је то глобална променљива окружења и доступна свима, корисник Мари може да референцира променљиву окружења када се следећи пут пријави:

echo $WEBSITE

До погледајте све варијабле окружења одједном откуцајте принтенв. Има много излаза, тако да има смисла да га проследите кроз сортирање, а затим у мање:

printenv | sort | less

Сортирана листа променљивих окружења нам се приказује у мањем.

Можемо пренети излаз кроз греп да бисмо потражили променљиве окружења везано за одређену тему.

printenv | grep GNOME

Променљиве окружења љуске

Ово су неке од варијабли окружења љуске које се користе у басх-у за диктирање или снимање његовог понашања и функционалности. Неке од вредности се ажурирају док користите терминал. На пример, променљива окружења ЦОЛУМНС ће бити ажурирана како би одражавала промене које бисте могли да направите у ширини прозора терминала:

БАСХОПТС: Опције командне линије које су коришћене када је басх покренут.
БАСХ_ВЕРСИОН: Број верзије басх-а као низ речи и бројева.
БАСХ_ВЕРСИНФО: Басх верзија као цифра.
ЦОЛУМНС: Тренутна ширина прозора терминала.
ДИРСТАЦК: Директоријуми који су били додато у стек директоријума наредбом пусхд.
ХИСТФИЛЕСИЗЕ: Максималан број линије дозвољене у фајл историје.
ХИСТСИЗЕ: Број дозвољених линија историје у меморији.
ХОСТНАМЕ: Име хоста рачунара.
ИФС: Тхе Интерни сепаратор поља користи се за одвајање уноса на командној линији. Подразумевано, ово је размак.
ПС1: ПС1 променљива окружења садржи дефиницију за примарни, подразумевани и командни редак. Скуп токена који се називају излазне секвенце може бити укључен у дефиницију вашег командног ретка. Они представљају ствари као што су хост-и корисничко име, тренутни радни директоријум и време.
ПС2: Када команда обухвата више од једног реда и очекује се више уноса, приказује се секундарни командни редак. Променљива окружења ПС2 садржи дефиницију овог секундарног одзивника, који је, подразумевано, знак веће од (>).
СХЕЛЛОПТС: Опције шкољке које можете подесити користећи опцију сет.
УИД: Тхе Идентификатор корисника тренутног корисника.

  8 најбољих Линук апликација за дељење радне површине

Хајде да проверимо неке од ових променљивих љуске:

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

Ради комплетности, ево токена које можете користити у дефиницијама командне линије:

т: Тренутно време, форматирано као ХХ:ММ:СС.
д: Тренутни датум, изражен као дан у недељи, месец, датум.
н: Знак новог реда.
с: Име ваше шкољке.
В: Име вашег тренутног радног директоријума.
в: Путања до вашег тренутног радног директоријума.
у: Корисничко име особе која је пријављена.
х: Име хоста рачунара.
#: Свака команда унутар љуске је нумерисана. Ово вам омогућава да видите број команде у командној линији. Ово није исто што и број који ће команда имати на листи историје.
$: Поставља коначни знак упита на знак долара ($) за обичног корисника и хеш симбол (#) за основног корисника. Ово функционише тако што се проверава УИД корисника. Ако је нула, корисник је роот.

Наћи ћете дефиницију ваше ПС1 променљиве окружења у вашој .басхрц датотеци.

Креирање варијабли окружења сесије

Да бисте креирали променљиве окружења за сопствену употребу, додајте их на дно ваше .басхрц датотеке. Ако желите да променљиве окружења буду доступне удаљеним сесијама, као што су ССХ везе, мораћете да их додате и у своју .басх_профиле датотеку.

Формат дефиниције променљиве окружења је исти за обе датотеке. Да бисте додали дефиницију вашој .басх_профиле датотеци, откуцајте ово у свом кућном директоријуму:

gedit .bashrc

Додали смо променљиву окружења под називом ИНХЕРИТЕД_ВАР. Обратите пажњу на реч „извоз“ на почетку реда.

Сачувајте и затворите датотеку након што завршите са уређивањем. Можете да се одјавите и поново уђете или можете да натерате љуску да поново прочита датотеку .басх_профиле користећи команду тачка (.) овако:

. .bashrc

Сада, хајде да креирамо променљиву окружења на командној линији:

LOCAL_VAR="This session only"

ЛОЦАЛ_ВАЛ=

Ако користимо ехо, можемо видети да су нам обе променљиве окружења доступне:

echo $LOCAL_VAR
echo $INHERITED_VAR

Приметићете да је дефиниција променљиве окружења ИНХЕРИТЕД_ВАР имала реч „извоз” на почетку реда. То значи да ће променљиву окружења наследити подређени процеси тренутне љуске. Ако покренемо још једну помоћу команде басх, можемо поново да проверимо две променљиве, из унутрашњости дечије љуске:

bash
echo $LOCAL_VAR
echo $INHERITED_VAR

Као што видите, ИНХЕРИТЕД_ВАР је доступан у подређеној љусци, али ЛОЦАЛ_ВАР није. Једноставно добијамо празан ред.

Иако „извоз“ додаје део променљиве окружења у окружење које наслеђују процеси деце, ИНХЕРИТЕД_ВАР није глобална променљива окружења. На пример, корисник мари не може да га референцира:

echo $INHERITED_VAR

Да бисмо затворили нашу дечију басх сесију, користимо екит:

exit

Наслеђена окружења такође утичу на скрипте. Ево једноставне скрипте која уписује вредности наше три променљиве окружења у прозор терминала:

#!/bin/bash

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

Ово је сачувано у датотеци под називом енвтест.сх, а затим направљено као извршно са следећим:

chmod +x envtest.sh

Када покренемо скрипту, она може да приступи двема од три променљиве окружења:

./envtest.sh

Скрипта може да види глобалну променљиву окружења ВЕБСИТЕ и извезену променљиву окружења ИНХЕРИТЕД_ВАР. Не може да приступи ЛОЦАЛ_ВАР, иако се скрипта изводи у истој љусци где је променљива креирана.

  Како проверити верзију Питхон-а у Виндовс-у, Линук-у и мацОС-у [2023]

Ако треба, можемо да извеземо променљиву окружења из командне линије. Урадићемо то за наш ЛОЦАЛ_ВАР, а затим поново покренути скрипту:

export LOCAL_VAR
./envtest.sh

Променљива окружења је додата у окружење тренутне љуске и тако се појављује у окружењу које је наследила скрипта. Скрипта такође може референцирати ту променљиву окружења.

Ремоте Цоннецтионс

Глобалне променљиве окружења су доступне сесијама удаљене пријаве, али ако желите да вам ваше локално дефинисане променљиве окружења буду доступне даљински, морате их додати у вашу .басх_профиле датотеку. Можете подесити исту променљиву окружења у датотекама .басхрц и .басх_профиле, са различитим вредностима. Ово би могла да покупи скрипта, рецимо, да измени своје понашање за људе који користе систем локално или даљински.

(Уз ризик да се ствари збуне, постоји и .профиле датотека. Може да садржи и дефиниције променљивих окружења. Међутим, .профиле датотека се не чита ако је .басх_профиле датотека присутна. Дакле, најбезбедније је да се уради—и начин усаглашен са басх-ом—је да користите датотеку .басх_профиле.)

Да бисмо уредили датотеку .басх_профиле, поново ћемо користити гедит:

gedit .bash_profile

Додаћемо исту променљиву окружења са истом вредношћу коју смо раније користили.

Сачувајте промене и затворите гедит.

На другом рачунару направићемо ССХ везу са тест рачунаром.

ssh [email protected]

Када се повежемо, поново ћемо покренути скрипту:

./envtest.sh

Датотека .басх_профиле је прочитана као део иницијализације удаљеног пријављивања, а променљива окружења ИНХЕРИТЕД_ВАР је доступна нама и скрипти.

Поништавање променљиве окружења

Да бисте поништили променљиву окружења, користите унсет цомманд. Ако поништимо глобалну променљиву окружења, ВЕБСИТЕ, и извезену променљиву окружења, ИНХЕРИТЕД_ВАР, оне више неће бити доступне на командној линији, нити у подређеним процесима:

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

Треба напоменути да ово само мења доступност глобалних променљивих окружења за вас у овој сесији. Друга особа која је истовремено пријављена и даље ће моћи да приступи својој инстанци те глобалне променљиве окружења. Његова инстанца је иницијализована и прочитана из датотеке /етц/енвиронмент током његовог процеса пријављивања и независна је од било чије копије променљиве.

На пример, корисник Мари и даље може да приступи променљивој окружења ВЕБСИТЕ и прочита њену вредност, иако ју је корисник Даве поништио у својој сесији:

echo $WEBSITE

Контрола животне средине

Променљиве окружења се могу користити да би скрипте и апликације знали како треба да се понашају. Могу се користити за чување подешавања или мале количине података. На пример, скрипта може да попуни окружење вредношћу на коју друге скрипте могу референцирати без потребе да их уписује у датотеку.