Siwen onerwaart Bash Verännerlechen

Weider der Serie vun Noten iwwer manner bekannt Funktiounen bash, Ech weisen Iech siwen Verännerlechen Dir wësst vläicht net iwwer.

1) PROMPT_COMMAND

Dir sidd vläicht scho bewosst wéi Dir d'Prompt manipuléiert fir verschidde nëtzlech Informatioun ze weisen, awer net jidderee weess datt Dir e Shell-Kommando all Kéier wann d'Prompt gewise gëtt.

Tatsächlech benotze vill komplexe Promptmanipulatoren dës Variabel fir Kommandoen auszeféieren fir Informatioun ze sammelen déi an der Prompt ugewise gëtt.

Probéiert dëst an enger neier Shell ze lafen a kuckt wat mat der Sessioun geschitt:

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

2) HISTTIMEFORMAT

Wann Dir leeft history an der Konsole kritt Dir eng Lëscht vu Kommandoen déi virdru ënner Ärem Kont ausgefouert goufen.

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

Wann dës Variabel agestallt ass, notéieren nei Entréen d'Zäit zesumme mam Kommando, sou datt d'Ausgab esou ausgesäit:

1871 Ech hunn dëst op: 01/05/19 13:38:07 cat /etc/resolv.conf 1872 Ech hunn dëst gelaf: 01/05/19 13:38:19 curl bbc.co.uk 1873 Ech hunn dëst um lafen : 01/05/19 13:38:41 sudo vi /etc/resolv.conf 1874 Ech hunn dëst gelaf: 01/05/19 13:39:18 curl -vvv bbc.co.uk 1876 Ech hunn dëst gelaf: 01 /05/19 13:39:25 sudo su -

Formatéierung entsprécht Zeechen aus man date.

3) CDPATH

Fir Zäit op der Kommandozeil ze spueren, kënnt Dir dës Variabel benotze fir Verzeichnungen esou einfach z'änneren wéi Dir Kommandoen erausginn.

Wéi och PATH, Variabel CDPATH ass eng Kolon-getrennt Lëscht vu Weeër. Wann Dir de Kommando leeft cd mat engem relativen Wee (dh kee féierende Schrätz), par défaut kuckt d'Schuel an Ärem lokalen Dossier fir passende Nimm. CDPATH wäert an de Weeër sichen, déi Dir uginn hutt fir de Verzeichnis an deem Dir wëllt goen.

Wann Dir installéiert CDPATH op déi Manéier:

$ CDPATH=/:/lib

an dann gitt:

$ cd /home
$ cd tmp

da wäert Dir ëmmer an /tmp egal wou Dir sidd.

Sidd awer virsiichteg, well wann Dir net déi lokal an der Lëscht spezifizéiert (.) Dossier, da kënnt Dir keen aneren Dossier erstellen tmp a gitt dohinner wéi gewinnt:

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

Oops!

Dëst ass ähnlech wéi d'Verwirrung déi ech gefillt hunn wéi ech gemierkt hunn datt de lokalen Dossier net an der méi vertrauter Variabel abegraff war PATH... awer Dir musst et an Ärer PATH Variabel maachen, well Dir vläicht e gefälschte Kommando aus engem erofgeluede Code lafe kënnt.

Mine gëtt vum Startpunkt gesat:

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

4) SHLVL

Hutt Dir jeemools gefrot, Tippen exit wäert et Iech aus Ärer aktueller Bash Shell an eng aner "Elteren" Shell huelen, oder wäert et just d'Konsolfenster komplett zoumaachen?

Dës Variabel verfollegt wéi déif nested Dir an der Bash Shell sidd. Wann Dir en neien Terminal erstellt, ass et op 1 gesat:

$ echo $SHLVL
1

Dann, wann Dir en anere Shellprozess ufänkt, erhéicht d'Zuel:

$ bash
$ echo $SHLVL
2

Dëst kann ganz nëtzlech sinn a Skripte wou Dir net sécher sidd ob Dir erausgoe wëllt oder net, oder verfollegen wou Dir nestéiert sidd.

5) LINENO

D'Variabel ass och nëtzlech fir den aktuellen Zoustand ze analyséieren an ze Debugging LINENO, déi d'Zuel vun de Befehle bericht, déi an der Sessioun bis elo ausgefouert goufen:

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

Dëst gëtt meeschtens benotzt wann Dir Scripten Debugging. Asetzen Linnen wéi echo DEBUG:$LINENO, Dir kënnt séier bestëmmen wou am Skript Dir sidd (oder net).

6) REPLY

Wann Dir, wéi ech, normalerweis Code esou schreift:

$ read input
echo do something with $input

Et kann als Iwwerraschung kommen datt Dir Iech guer keng Suerge maache musst iwwer d'Variabel ze kreéieren:

$ read
echo do something with $REPLY

Dëst mécht déi selwecht Saach.

7) TMOUT

Fir ze vermeiden aus Sécherheetsgrënn ze laang op Produktiounsserveren ze bleiwen oder zoufälleg eppes geféierlech am falschen Terminal ze lafen, setzt dës Variabel als Schutz.

Wann näischt fir eng bestëmmte Zuel vu Sekonnen aginn ass, geet d'Schuel eraus.

Dat ass, dëst ass eng Alternativ sleep 1 && exit:

$ TMOUT=1

Source: will.com

Setzt e Commentaire