Sju oväntade Bash-variabler

Fortsätter serien av anteckningar om mindre känd funktioner bash, jag ska visa dig sju variabler som du kanske inte känner till.

1) PROMPT_COMMAND

Du kanske redan vet hur man manipulerar prompten för att visa olika användbar information, men inte alla vet att du kan köra ett skalkommando varje gång prompten visas.

Faktum är att många komplexa promptmanipulatorer använder denna variabel för att utföra kommandon för att samla in information som visas i prompten.

Testa att köra detta i ett nytt skal och se vad som händer med sessionen:

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

2) HISTTIMEFORMAT

Om du springer history i konsolen kommer du att få en lista över kommandon som tidigare utförts under ditt konto.

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

När den här variabeln har ställts in registrerar nya poster tiden tillsammans med kommandot, så resultatet kommer att se ut så här:

1871 Jag körde detta på: 01/05/19 13:38:07 cat /etc/resolv.conf 1872 Jag körde detta på: 01/05/19 13:38:19 curl bbc.co.uk 1873 Jag körde detta på : 01/05/19 13:38:41 sudo vi /etc/resolv.conf 1874 Jag körde detta på: 01/05/19 13:39:18 curl -vvv bbc.co.uk 1876 Jag körde detta på: 01 /05/19 13:39:25 sudo su -

Formateringen matchar tecken från man date.

3) CDPATH

För att spara tid på kommandoraden kan du använda den här variabeln för att ändra kataloger lika enkelt som du utfärdar kommandon.

Som PATH, variabel CDPATH är en kolonseparerad lista med sökvägar. När du kör kommandot cd med en relativ sökväg (dvs. inget inledande snedstreck), som standard letar skalet i din lokala mapp efter matchande namn. CDPATH kommer att söka i sökvägarna du angav efter katalogen du vill gå till.

Om du installerar CDPATH Således:

$ CDPATH=/:/lib

och skriv sedan in:

$ cd /home
$ cd tmp

då kommer du alltid att hamna i /tmp oavsett var du är.

Var dock försiktig, för om du inte anger den lokala i listan (.) mapp, så kommer du inte att kunna skapa någon annan mapp tmp och gå till det som vanligt:

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

hoppsan!

Detta liknar den förvirring jag kände när jag insåg att den lokala mappen inte ingick i den mer välbekanta variabeln PATH... men du måste göra det i din PATH-variabel eftersom du kan bli lurad att köra ett falskt kommando från någon nedladdad kod.

Min är satt av startpunkten:

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

4) SHLVL

Har du någonsin undrat, att skriva exit kommer det att ta dig ut från ditt nuvarande bash-skal till ett annat "förälder"-skal, eller kommer det bara att stänga konsolfönstret helt?

Denna variabel håller reda på hur djupt kapslad du är i bash-skalet. Om du skapar en ny terminal är den inställd på 1:

$ echo $SHLVL
1

Sedan, om du startar en annan skalprocess, ökar antalet:

$ bash
$ echo $SHLVL
2

Detta kan vara mycket användbart i skript där du inte är säker på om du ska avsluta eller inte, eller hålla reda på var du är kapslad.

5) LINENO

Variabeln är också användbar för att analysera det aktuella tillståndet och felsökning LINENO, som rapporterar antalet kommandon som körts i sessionen hittills:

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

Detta används oftast vid felsökning av skript. Infoga rader som echo DEBUG:$LINENO, kan du snabbt avgöra var i skriptet du är (eller inte).

6) REPLY

Om du som jag brukar skriva kod så här:

$ read input
echo do something with $input

Det kan komma som en överraskning att du inte behöver oroa dig för att skapa variabeln alls:

$ read
echo do something with $REPLY

Detta gör samma sak.

7) TMOUT

För att undvika att stanna på produktionsservrar för länge av säkerhetsskäl eller av misstag köra något farligt i fel terminal, fungerar inställningen av denna variabel som ett skydd.

Om inget matas in under ett visst antal sekunder, avslutas skalet.

Det vill säga, detta är ett alternativ sleep 1 && exit:

$ TMOUT=1

Källa: will.com

Lägg en kommentar