Fortsätter serien av anteckningar om
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