Folytatva a jegyzetsorozatot arról
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