Sedm překvapivých proměnných Bash

Pokračuji v sérii příspěvků o méně známých funkcích bash, ukážu vám sedm proměnných, o kterých jste možná nevěděli.

1) PROMPT_COMMAND

Možná už víte, jak manipulovat s výzvou prompt, abyste zobrazili různé užitečné informace, ale ne každý ví, že při každém zobrazení výzvy můžete spouštět příkaz shellu.

Ve skutečnosti mnozí složitější manipulátoři prompt používají tuto proměnnou k provádění příkazů pro shromažďování informací, které se zobrazují ve výzvě.

Zkuste to spustit v novém shellu a uvidíte, co se stane se sezením:

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

2) HISTTIMEFORMAT

Pokud spustíte history v konzoli, dostanete seznam příkazů, které jste dříve vykonali pod svým účtem.

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

Jakmile je tato proměnná nastavena, nové záznamy zaznamenávají čas spolu s příkazem, takže výstup bude vypadat takto:

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 -

Formátování odpovídá znakům z man date.

3) CDPATH

Abychom ušetřili čas v příkazovém řádku, můžete použít tuto proměnnou k přechodu mezi adresáři stejně snadno, jako spouštíte příkazy.

Jak a cest, proměnná CDPATH je seznam cest oddělených dvojtečkou. Když spustíte příkaz cd s relativní cestou (tj. bez lomítka na začátku), shell ve výchozím nastavení hledá v lokálním adresáři odpovídající názvy. CDPATH bude hledat v cestách, které jste zadali pro adresář, do kterého chcete přejít.

Pokud nastavíte CDPATH tímto způsobem:

$ CDPATH=/:/lib

a pak zadáte:

$ cd /home
$ cd tmp

dostanete se vždy do /tmp bez ohledu na to, kde se nacházíte.

Buďte však opatrní, protože pokud v seznamu neuvedete místní (.) adresář, nebudete moci vytvořit žádný jiný adresář tmp a přejít k němu, jak obvykle:

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

Oops!

To vypadá na zmatek, který jsem cítil, když jsem pochopil, že lokální adresář nebyl zahrnut do známější proměnné cest… ale měli byste to udělat v proměnné PATH, protože vás mohou oklamat spuštěním falešného příkazu z nějakého staženého kódu.

Moje se nastavuje na počáteční bod:

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

4) SHLVL

Zamysleli jste se někdy nad tím, co píšete exit vás vyvede z aktuální shellové instance bash do jiné "rodičovské" instance nebo jednoduše úplně zavře okno konzole?

Tato proměnná sleduje, jak hluboko jste v shellu bash. Pokud vytvoříte nový terminál, je nastavena na 1:

$ echo $SHLVL
1

Poté, pokud spustíte další proces shellu, číslo se zvyšuje:

$ bash
$ echo $SHLVL
2

To může být velmi užitečné ve skriptech, kde si nejste jisti, zda byste měli opustit, nebo sledovat, kde se nacházíte v rámci zasunutí.

5) LINENO

Také pro analýzu aktuálního stavu a ladění je užitečná proměnná LINENO, která oznamuje počet příkazů vykonaných v sezení dosud:

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

To se nejčastěji používá při ladění skriptů. Vložením takových řádků, jako jsou echo DEBUG:$LINENO, můžete rychle zjistit, kde se ve skriptu nacházíte (nebo ne).

6) REPLY

Pokud, jako já, obvykle píšete takový kód:

$ read input
echo dělat něco s $input

pak může být překvapením, že se nemusíte vůbec starat o vytvoření proměnné:

$ read
echo dělat něco s $REPLY

To dělá to samé.

7) TMOUT

Abyste na produkčních serverech nezůstávali příliš dlouho kvůli bezpečnosti nebo omylem nespustili něco nebezpečného v nesprávném terminálu, nastavení této proměnné funguje jako ochrana.

Pokud se během nastaveného počtu sekund nic nezadá, dojde k odhlášení z shellu.

To znamená, že je to alternativa sleep 1 && exit:

$ TMOUT=1

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster