Pokračovanie série poznámok o bash, ukážem vám sedem premenných, o ktorých možno neviete.
1) PROMPT_COMMAND
Možno už viete, ako manipulovať s výzvou na zobrazenie rôznych užitočných informácií, ale nie každý vie, že príkaz shellu môžete spustiť vždy, keď sa výzva zobrazí.
V skutočnosti mnoho sofistikovaných manipulátorov s výzvou používa túto premennú na vykonávanie príkazov na zhromažďovanie informácií, ktoré sa zobrazujú v výzve.
Skúste to spustiť v novom shelli a uvidíte, čo sa stane so reláciou:
$ PROMPT_COMMAND='echo -n "writing the prompt at " && date'2) HISTTIMEFORMAT
Ak sa spustí history V konzole sa zobrazí zoznam príkazov, ktoré boli predtým vykonané pod vaším účtom.
$ HISTTIMEFORMAT='I ran this at: %d/%m/%y %T 'Po nastavení tejto premennej budú nové položky zaznamenávať čas spolu s príkazom, takže výstup bude vyzerať takto:
1871 Spustil som to o: 01/05/19 13:38:07 cat /etc/resolv.conf 1872 Spustil som to o: 01/05/19 13:38:19 curl bbc.co.uk 1873 Spustil som to o: 01/05/19 13:38:41 sudo vi /etc/resolv.conf 1874 Spustil som to o: 01/05/19 13:39:18 curl -vvv bbc.co.uk 1876 Spustil som to o: 01/05/19 13:39:25 sudo su -
Formátovanie zodpovedá znakom z man date.
3) CDPATH
Ak chcete ušetriť čas na príkazovom riadku, môžete túto premennú použiť na zmenu adresárov rovnako jednoducho, ako zadávate príkazy.
ako PATH, premenná CDPATH je zoznam ciest oddelených dvojbodkami. Keď spustíte príkaz cd s relatívnou cestou (t. j. bez úvodného lomítka) shell štandardne prehľadá váš lokálny priečinok a nájde zodpovedajúce názvy. CDPATH vyhľadá zadané cesty k adresáru, do ktorého chcete prejsť.
Ak nainštalujete CDPATH týmto spôsobom:
$ CDPATH=/:/liba potom zadajte:
$ cd /home
$ cd tmp potom sa vždy dostaneš do /tmp bez ohľadu na to, kde sa nachádzate.
Buďte však opatrní, pretože ak v zozname neuvediete lokálny (.) priečinok, potom nebudete môcť vytvoriť žiadny iný priečinok tmp a choďte na to ako zvyčajne:
$ cd /home
$ mkdir tmp
$ cd tmp
$ pwd
/tmpUps!
Je to podobné zmätku, ktorý som cítil, keď som si uvedomil, že lokálny priečinok nebol zahrnutý v známejšej premennej PATH...ale musíte to urobiť v premennej PATH, pretože by ste mohli byť oklamaní a spustiť falošný príkaz z nejakého stiahnutého kódu.
Moja je určená východiskovým bodom:
CDPATH=.:/space:/etc:/var/lib:/usr/share:/opt4) SHLVL
Premýšľali ste niekedy nad vstupom? exit Odhlási vás z aktuálneho bash shellu a prepne vás do iného „rodičovského“ shellu, alebo úplne zatvorí okno konzoly?
Táto premenná sleduje, ako hlboko ste vnorení v bash shelle. Ak vytvoríte nový terminál, nastaví sa na 1:
$ echo $SHLVL
1Potom, ak spustíte ďalší proces shellu, číslo sa zvýši:
$ bash
$ echo $SHLVL
2Toto môže byť veľmi užitočné v skriptoch, kde si nie ste istí, či máte ukončiť alebo nie, alebo na sledovanie, kde sa vo vnorení nachádzate.
5) LINENO
Užitočná na analýzu aktuálneho stavu a ladenie je aj premenná LINENO, ktorý uvádza počet príkazov vykonaných v relácii doteraz:
$ bash
$ echo $LINENO
1
$ echo $LINENO
2 Toto sa najčastejšie používa pri ladení skriptov. Vložením riadkov ako echo DEBUG:$LINENO, môžete rýchlo určiť, kde v skripte sa nachádzate (alebo nie).
6) REPLY
Ak, rovnako ako ja, zvyčajne píšete kód takto:
$ read input
echo do something with $inputMožno vás prekvapí, že sa vôbec nemusíte obávať vytvorenia premennej:
$ read
echo do something with $REPLYToto robí to isté.
7) TMOUT
Aby ste predišli príliš dlhému zotrvaniu na produkčných serveroch z bezpečnostných dôvodov alebo náhodnému spusteniu niečoho nebezpečného v nesprávnom termináli, nastavenie tejto premennej slúži ako ochrana.
Ak sa počas nastaveného počtu sekúnd nezadá nič, shell sa ukončí.
Teda, je to alternatíva. sleep 1 && exit:
$ TMOUT=1Zdroj: hab.com
