Седам неочекиваних Басх варијабли

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

1) PROMPT_COMMAND

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

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

Покушајте да покренете ово у новој љусци и видите шта се дешава са сесијом:

$ 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 цат /етц/ресолв.цонф 1872 Покренуо сам ово на: 01/05/19 13:38:19 цурл ббц.цо.ук 1873 Покренуо сам ово на : 01/05/19 13:38:41 судо ви /етц/ресолв.цонф 1874 Покренуо сам ово на: 01/05/19 13:39:18 цурл -ввв ббц.цо.ук 1876 Покренуо сам ово на: 01 /05/19 13:39:25 судо су -

Форматирање одговара знаковима из 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... али то морате да урадите у својој ПАТХ променљивој јер бисте могли бити преварени да покренете лажну команду из неког преузетог кода.

Мој је постављен почетном тачком:

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

4) SHLVL

Да ли сте се икада запитали, куцајући exit да ли ће вас то одвести из ваше тренутне басх љуске у другу "родитељску" шкољку или ће само потпуно затворити прозор конзоле?

Ова променљива прати колико сте дубоко угнежђени у басх љусци. Ако креирате нови терминал, он је постављен на 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

Извор: ввв.хабр.цом

Додај коментар