Sedem neočakávaných Bashových premenných

Pokračovanie série poznámok o menej známe funkcie 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=/:/lib

a 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
/tmp

Ups!

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:/opt

4) 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
1

Potom, ak spustíte ďalší proces shellu, číslo sa zvýši:

$ bash
$ echo $SHLVL
2

Toto 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 $input

Možno vás prekvapí, že sa vôbec nemusíte obávať vytvorenia premennej:

$ read
echo do something with $REPLY

Toto 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=1

Zdroj: hab.com

Kúpte si spoľahlivý hosting pre stránky s DDoS ochranou, VPS VDS servery 🔥 Kúpte si spoľahlivý webhosting s ochranou DDoS, VPS VDS servery | ProHoster