Продължавайки поредицата от бележки за 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:/opt4) 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
