Յոթ անսպասելի Bash փոփոխականներ

Շարունակելով գրառումների շարքը քիչ հայտնի գործառույթները bash, ես ձեզ ցույց կտամ յոթ փոփոխական, որոնց մասին գուցե չգիտեք:

1) PROMPT_COMMAND

Հնարավոր է, որ դուք արդեն գիտեք, թե ինչպես պետք է շահարկել հուշումը տարբեր օգտակար տեղեկություններ ցուցադրելու համար, բայց ոչ բոլորը գիտեն, որ դուք կարող եք գործարկել shell հրամանը ամեն անգամ, երբ հուշումը ցուցադրվում է:

Իրականում, շատ բարդ հուշումների մանիպուլյատորներ օգտագործում են այս փոփոխականը՝ հրամաններ կատարելու համար, որպեսզի հավաքեն տեղեկատվություն, որը ցուցադրվում է հուշում:

Փորձեք սա գործարկել նոր պատյանով և տեսեք, թե ինչ է տեղի ունենում նիստի հետ.

$ PROMPT_COMMAND='echo -n "writing the prompt at " && date'

2) HISTTIMEFORMAT

Եթե ​​վազել history վահանակում դուք կստանաք ձեր հաշվի տակ նախկինում կատարված հրամանների ցանկը:

$ HISTTIMEFORMAT='I ran this at: %d/%m/%y %T '

Երբ այս փոփոխականը սահմանվի, նոր մուտքերը հրամանի հետ միասին գրանցում են ժամանակը, ուստի ելքը կունենա հետևյալ տեսքը.

1871թ. ես սա գործարկեցի հետևյալ հասցեով՝ 01/05/19 13:38:07 cat /etc/resolv.conf 1872թ. Ես սա գործարկեցի հետևյալ հասցեով՝ 01/05/19 13:38:19 curl bbc.co.uk 1873թ. 01/05/19 13:38:41 sudo vi /etc/resolv.conf 1874 Ես գործարկեցի սա՝ 01/05/19 13:39:18 curl -vvv bbc.co.uk 1876 թ. /01/05 19:13:39 sudo su -

Ֆորմատավորումը համապատասխանում է նիշերին man date.

3) CDPATH

Հրամանի տողում ժամանակ խնայելու համար դուք կարող եք օգտագործել այս փոփոխականը դիրեկտորիաները փոխելու համար այնքան հեշտությամբ, որքան հրամաններ եք տալիս:

ինչպես PATH, փոփոխական CDPATH երկու կետով բաժանված ուղիների ցանկ է: Երբ գործարկում եք հրամանը cd հարաբերական ճանապարհով (այսինքն՝ առանց առաջատար շեղի), լռելյայնորեն կեղևը փնտրում է ձեր տեղական պանակում՝ համապատասխան անունների համար: CDPATH կփնտրի ձեր տված ուղիներում այն ​​գրացուցակը, ուր ցանկանում եք գնալ:

Եթե ​​տեղադրեք CDPATH այս կերպ.

$ CDPATH=/:/lib

և ապա մուտքագրեք.

$ cd /home
$ cd tmp

ապա դուք միշտ կհայտնվեք այնտեղ /tmp անկախ նրանից, թե որտեղ եք դուք:

Այնուամենայնիվ, զգույշ եղեք, քանի որ եթե ցուցակում չեք նշում տեղականը (.) թղթապանակ, ապա այլ թղթապանակ չեք կարողանա ստեղծել tmp և գնացեք դրան, ինչպես միշտ:

$ cd /home
$ mkdir tmp
$ cd tmp
$ pwd
/tmp

Վա՜յ

Սա նման է այն շփոթությանը, որը ես զգացի, երբ հասկացա, որ տեղական թղթապանակը ներառված չէ ավելի ծանոթ փոփոխականում PATH... բայց դուք պետք է դա անեք ձեր PATH փոփոխականում, քանի որ ձեզ կարող են խաբել կեղծ հրաման գործարկել որոշ ներբեռնված կոդից:

Իմը սահմանվում է ելակետով.

CDPATH=.:/space:/etc:/var/lib:/usr/share:/opt

4) SHLVL

Երբևէ մտածե՞լ եք՝ մուտքագրելով exit արդյո՞ք այն ձեզ դուրս կբերի ձեր ընթացիկ bash shell-ից դեպի մեկ այլ «ծնող» պատյան, թե՞ այն պարզապես ամբողջությամբ կփակի վահանակի պատուհանը:

Այս փոփոխականը հետևում է, թե որքան խորն եք բույն դրված բաշի պատյանում: Եթե ​​ստեղծեք նոր տերմինալ, այն սահմանվում է 1:

$ echo $SHLVL
1

Այնուհետև, եթե սկսեք մեկ այլ կեղևի գործընթաց, թիվը ավելանում է.

$ bash
$ echo $SHLVL
2

Սա կարող է շատ օգտակար լինել այն սկրիպտներում, որտեղ դուք վստահ չեք՝ դուրս գալ, թե ոչ, կամ հետևել, թե որտեղ եք գտնվում:

5) LINENO

Փոփոխականը նաև օգտակար է ընթացիկ վիճակի վերլուծության և վրիպազերծման համար LINENO, որը հայտնում է նիստում մինչ այժմ կատարված հրամանների քանակը.

$ bash
$ echo $LINENO
1
$ echo $LINENO
2

Սա առավել հաճախ օգտագործվում է սկրիպտների վրիպազերծման ժամանակ: Նման տողերի տեղադրում echo DEBUG:$LINENO, դուք կարող եք արագ որոշել, թե որտեղ եք սցենարի մեջ (թե ոչ):

6) REPLY

Եթե, ինչպես ինձ, դուք սովորաբար գրում եք կոդ այսպես.

$ read input
echo do something with $input

Կարող է անակնկալ լինել, որ դուք ընդհանրապես կարիք չունեք անհանգստանալու փոփոխական ստեղծելու մասին.

$ read
echo do something with $REPLY

Սա նույն բանն է անում:

7) TMOUT

Անվտանգության նկատառումներից ելնելով արտադրական սերվերների վրա չափազանց երկար մնալուց կամ սխալ տերմինալում ինչ-որ վտանգավոր բան գործարկելու համար, այս փոփոխականի կարգավորումը գործում է որպես պաշտպանություն:

Եթե ​​ոչինչ չի մուտքագրվում որոշակի վայրկյանների համար, ապա կեղևը դուրս է գալիս:

Այսինքն՝ սա այլընտրանք է sleep 1 && exit:

$ TMOUT=1

Source: www.habr.com

Добавить комментарий