Pokračuji v sérii příspěvků o 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=/:/liba 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
/tmpOops!
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:/opt4) 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
1Poté, pokud spustíte další proces shellu, číslo se zvyšuje:
$ bash
$ echo $SHLVL
2To 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 $inputpak 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 $REPLYTo 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=1Zdroj: habr.com
