Hét váratlan Bash-változó

Folytatva a jegyzetsorozatot arról kevésbé ismert funkciókat bash, megmutatok hét változót, amiről esetleg nem tud.

1) PROMPT_COMMAND

Lehet, hogy már tudja, hogyan kell kezelni a promptot, hogy különféle hasznos információkat jelenítsen meg, de nem mindenki tudja, hogy minden alkalommal futtathat shell parancsot, amikor megjelenik a prompt.

Valójában sok összetett prompt-manipulátor használja ezt a változót parancsok végrehajtására a promptban megjelenő információk összegyűjtésére.

Próbáld meg új parancsértelmezőben futtatni, és nézd meg, mi történik a munkamenettel:

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

2) HISTTIMEFORMAT

Ha futni history a konzolban megjelenik a fiókja alatt korábban végrehajtott parancsok listája.

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

Ha ez a változó be van állítva, az új bejegyzések rögzítik az időt a paranccsal együtt, így a kimenet így fog kinézni:

1871 Ezt a következő címen futtattam: 01/05/19 13:38:07 cat /etc/resolv.conf 1872 Itt futtattam: 01/05/19 13:38:19 curl bbc.co.uk 1873 : 01/05/19 13:38:41 sudo vi /etc/resolv.conf 1874 Ezt a következő időpontban futtattam: 01/05/19 13:39:18 curl -vvv bbc.co.uk 1876 Én: 01 /05/19 13:39:25 sudo su -

A formázás megfelel a következő karaktereinek man date.

3) CDPATH

Ha időt takarít meg a parancssorban, ezzel a változóval olyan egyszerűen válthat könyvtárakat, mint a parancsokat.

Ahogy PATH, változó CDPATH az útvonalak kettősponttal elválasztott listája. Amikor futtatja a parancsot cd relatív elérési úttal (azaz nincs perjel), alapértelmezés szerint a shell a helyi mappában keresi a megfelelő neveket. CDPATH az Ön által megadott elérési utakon keresi azt a könyvtárat, ahová menni szeretne.

Ha telepíted CDPATH ily módon:

$ CDPATH=/:/lib

majd írja be:

$ cd /home
$ cd tmp

akkor mindig bekerülsz /tmp nem számít hol vagy.

Legyen azonban óvatos, mert ha nem adja meg a helyit a listában (.) mappát, akkor nem tud más mappát létrehozni tmp és menj rá a szokásos módon:

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

Hoppá!

Ez hasonló ahhoz a zavarhoz, amelyet akkor éreztem, amikor rájöttem, hogy a helyi mappa nem szerepel az ismertebb változóban PATH... de ezt a PATH változóban kell megtenned, mert előfordulhat, hogy hamis parancsot futtatsz valamilyen letöltött kódból.

Az enyémet a kiindulási pont határozza meg:

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

4) SHLVL

Gondolkozott már azon, hogy gépel exit az aktuális bash shellből egy másik "szülő" shellbe visz, vagy csak teljesen bezárja a konzol ablakot?

Ez a változó nyomon követi, hogy milyen mélyen van beágyazva a bash shellben. Ha új terminált hoz létre, az 1 lesz:

$ echo $SHLVL
1

Ezután, ha elindít egy másik shell-folyamatot, a szám növekszik:

$ bash
$ echo $SHLVL
2

Ez nagyon hasznos lehet olyan szkripteknél, ahol nem biztos abban, hogy ki kell-e lépnie, vagy nem tudja nyomon követni, hogy hol van beágyazva.

5) LINENO

A változó az aktuális állapot elemzéséhez és a hibakereséshez is hasznos LINENO, amely a munkamenetben eddig végrehajtott parancsok számát jelenti:

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

Ezt leggyakrabban a szkriptek hibakeresésekor használják. Sorok beszúrása, mint echo DEBUG:$LINENO, gyorsan meghatározhatja, hogy a szkriptben hol tartózkodik (vagy nem).

6) REPLY

Ha, mint én, általában így ír kódot:

$ read input
echo do something with $input

Meglepő lehet, hogy egyáltalán nem kell aggódnia a változó létrehozása miatt:

$ read
echo do something with $REPLY

Ez ugyanazt teszi.

7) TMOUT

Annak elkerülése érdekében, hogy biztonsági okokból túl sokáig maradjon az éles kiszolgálókon, vagy véletlenül ne futtasson valami veszélyeset a rossz terminálon, ennek a változónak a beállítása védelemként működik.

Ha egy meghatározott számú másodpercig nem ír be semmit, a shell kilép.

Vagyis ez egy alternatíva sleep 1 && exit:

$ TMOUT=1

Forrás: will.com

Hozzászólás