Ҳафт тағирёбандаи ғайричашмдошти 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:25 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 то чӣ андоза амиқ ҷойгиред. Агар шумо терминали нав эҷод кунед, он ба 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

Манбаъ: will.com

Илова Эзоҳ