Sedm neočekávaných Bash proměnných

Pokračování série poznámek o méně známý funkce bash, ukážu vám sedm proměnných, o kterých možná nevíte.

1) PROMPT_COMMAND

Možná již víte, jak zacházet s výzvou k zobrazení různých užitečných informací, ale ne každý ví, že můžete spustit příkaz shellu pokaždé, když se výzva zobrazí.

Ve skutečnosti mnoho složitých manipulátorů s výzvami používá tuto proměnnou k provádění příkazů ke shromažďování informací, které se zobrazují ve výzvě.

Zkuste to spustit v novém prostředí a uvidíte, co se stane s relací:

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

2) HISTTIMEFORMAT

Pokud běžíš history v konzole obdržíte seznam příkazů dříve provedených pod vaším účtem.

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

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

1871 Spustil jsem to v: 01/05/19 13:38:07 cat /etc/resolv.conf
1872 Spustil jsem to na: 01/05/19 13:38:19 curl bbc.co.uk
1873 Spustil jsem to v: 01/05/19 13:38:41 sudo vi /etc/resolv.conf
1874 Toto jsem spustil v: 01/05/19 13:39:18 curl -vvv bbc.co.uk
1876 ​​Spustil jsem to v: 01/05/19 13:39:25 sudo su -

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

3) CDPATH

Chcete-li ušetřit čas na příkazovém řádku, můžete pomocí této proměnné měnit adresáře stejně snadno jako zadáváte příkazy.

Jako PATH, variabilní CDPATH je seznam cest oddělených dvojtečkou. Když spustíte příkaz cd s relativní cestou (tj. bez úvodního lomítka), ve výchozím nastavení hledá shell ve vaší místní složce odpovídající názvy. CDPATH vyhledá v zadaných cestách adresář, do kterého chcete přejít.

Pokud nainstalujete CDPATH tímto způsobem:

$ CDPATH=/:/lib

a poté zadejte:

$ cd /home
$ cd tmp

pak vždy skončíš v /tmp nezáleží na tom kde jsi.

Buďte však opatrní, protože pokud v seznamu neuvedete místní (.), pak nebudete moci vytvořit žádnou další složku tmp a přejděte na to jako obvykle:

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

Jejda!

Je to podobné zmatku, který jsem cítil, když jsem si uvědomil, že místní složka není zahrnuta ve známější proměnné PATH... ale musíte to udělat ve své proměnné PATH, protože byste mohli být oklamáni spuštěním falešného příkazu z nějakého staženého kódu.

Můj je nastaven výchozím bodem:

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

4) SHLVL

Přemýšleli jste někdy o psaní exit vezme vás to z vašeho aktuálního bash shellu do jiného "rodičovského" shellu, nebo to prostě úplně zavře okno konzoly?

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

$ echo $SHLVL
1

Pokud pak spustíte další proces shellu, číslo se zvýší:

$ bash
$ echo $SHLVL
2

To může být velmi užitečné ve skriptech, kde si nejste jisti, zda skončit nebo ne, nebo sledovat, kde jste vnořeni.

5) LINENO

Proměnná je také užitečná pro analýzu aktuálního stavu a ladění LINENO, který hlásí počet dosud provedených příkazů v relaci:

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

Nejčastěji se to používá při ladění skriptů. Vkládání řádků jako echo DEBUG:$LINENO, můžete rychle určit, kde se ve skriptu nacházíte (nebo ne).

6) REPLY

Pokud jako já obvykle píšete kód takto:

$ read input
echo do something with $input

Možná bude překvapením, že se s vytvářením proměnné nemusíte vůbec starat:

$ read
echo do something with $REPLY

Tohle dělá to samé.

7) TMOUT

Chcete-li se vyhnout příliš dlouhému pobytu na produkčních serverech z bezpečnostních důvodů nebo náhodnému spuštění něčeho nebezpečného ve špatném terminálu, funguje nastavení této proměnné jako ochrana.

Pokud po nastavený počet sekund nic nezadáte, shell opustí.

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

$ TMOUT=1

Zdroj: www.habr.com

Přidat komentář