Седем неочаквани променливи в Bash

Продължавайки поредицата от бележки за по-малко известни функции bash, ще ви покажа седем променливи, за които може би не сте знаели.

1) PROMPT_COMMAND

Може би вече знаете как да манипулирате prompt, за да покажете различна полезна информация, но не всеки знае, че всеки път, когато се показва prompt, можете да изпълнявате команди на обвивката.

Всъщност много сложни манипулатори на prompt използват тази променлива, за да изпълняват команди, които събират информация, показвана в prompt.

Опитайте да стартирате това в нова обвивка и ще видите какво ще се случи със сесията:

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

2) HISTTIMEFORMAT

Ако стартирате history в конзолата, ще получите списък с команди, които преди това са били изпълнявани от вашия акаунт.

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

След като тази променлива е зададена, новите записи ще записват времето заедно с командата, така че изходът ще изглежда така:

1871  I ran this at: 01/05/19 13:38:07 cat /etc/resolv.conf
1872  I ran this at: 01/05/19 13:38:19 curl bbc.co.uk
1873  I ran this at: 01/05/19 13:38:41 sudo vi /etc/resolv.conf
1874  I ran this at: 01/05/19 13:39:18 curl -vvv bbc.co.uk
1876  I ran this at: 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 обвивка в друга "родителска" обвивка или просто напълно ще затвори прозореца на конзолата?

Тази променлива проследява колко дълбоко сте навлезли в 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 направи нещо с $input

то може да бъде изненада, че изобщо не трябва да се притеснявате за създаване на променлива:

$ read
echo направи нещо с $REPLY

Това прави същото.

7) TMOUT

За да не останете твърде дълго на производствени сървъри с цел безопасност или случайно да не стартирате нещо опасно в грешния терминал, настройването на тази променлива действа като защита.

Ако нищо не се въведе в рамките на зададеното време, се извършва изход от обвивката.

Тоест, това е алтернатива на sleep 1 && exit:

$ TMOUT=1

Източник: habr.com

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster