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

Pokračovanie série poznámok o menej známy 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, aby sa zobrazili rôzne užitočné informácie, ale nie každý vie, že príkaz shellu môžete spustiť vždy, keď sa výzva zobrazí.

V skutočnosti mnoho zložitých manipulátorov s výzvami používa túto premennú na vykonávanie príkazov na zhromažďovanie informácií, ktoré sa zobrazujú vo výzve.

Skúste to spustiť v novom prostredí a uvidíte, čo sa stane s reláciou:

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

2) HISTTIMEFORMAT

Ak sa spustí history v konzole dostanete zoznam príkazov, ktoré ste predtým vykonali pod vaším účtom.

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

Keď je táto premenná nastavená, nové položky zaznamenajú č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 ľahko, ako zadávate príkazy.

ako PATH, variabilný CDPATH je dvojbodkou oddelený zoznam ciest. Keď spustíte príkaz cd s relatívnou cestou (t. j. bez úvodnej lomky), shell štandardne hľadá zodpovedajúce názvy vo vašom lokálnom priečinku. CDPATH bude hľadať v zadaných cestách pre adresár, do ktorého chcete ísť.

Ak nainštalujete CDPATH týmto spôsobom:

$ CDPATH=/:/lib

a potom zadajte:

$ cd /home
$ cd tmp

potom vždy skončíš v /tmp bez ohľadu na to, kde si.

Buďte však opatrní, pretože ak v zozname neuvediete lokálny (.), potom nebudete môcť vytvoriť žiadny iný priečinok tmp a prejdite na to ako obvykle:

$ cd /home
$ mkdir tmp
$ cd tmp
$ pwd
/tmp

Ojoj!

Je to podobné zmätku, ktorý som cítil, keď som si uvedomil, že lokálny priečinok nie je zahrnutý v známejšej premennej PATH... ale musíte to urobiť vo svojej premennej PATH, pretože môžete byť oklamaní spustením falošného príkazu z nejakého stiahnutého kódu.

Moja je nastavená počiatočným bodom:

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

4) SHLVL

Premýšľali ste niekedy nad písaním exit prenesie vás to z vášho aktuálneho bash shellu do iného "rodičovského" shellu, alebo to len úplne zatvorí okno konzoly?

Táto premenná sleduje, ako hlboko ste vnorení do bash shell. Ak vytvoríte nový terminál, nastaví sa na 1:

$ echo $SHLVL
1

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

$ bash
$ echo $SHLVL
2

To môže byť veľmi užitočné v skriptoch, kde si nie ste istí, či ukončiť alebo nie, alebo sledovať, kde ste vnorení.

5) LINENO

Premenná je tiež užitočná na analýzu aktuálneho stavu a ladenie LINENO, ktorý uvádza počet doteraz vykonaných príkazov v relácii:

$ bash
$ echo $LINENO
1
$ echo $LINENO
2

Najčastejšie sa to používa pri ladení skriptov. Vkladanie riadkov ako echo DEBUG:$LINENO, môžete rýchlo určiť, kde sa v skripte nachádzate (alebo nie).

6) REPLY

Ak, ako ja, zvyčajne píšete kód takto:

$ read input
echo do something with $input

Prekvapením môže byť, že sa s vytvorením premennej nemusíte vôbec obávať:

$ read
echo do something with $REPLY

Toto robí to isté.

7) TMOUT

Aby ste predišli príliš dlhému pobytu 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 funguje ako ochrana.

Ak počas nastaveného počtu sekúnd nič nezadáte, shell sa ukončí.

To znamená, že toto je alternatíva sleep 1 && exit:

$ TMOUT=1

Zdroj: hab.com

Pridať komentár