Fortsæt serien af bemærkninger om i bash ved at vise dig syv variabler, som du måske ikke kender til.
1) PROMPT_COMMAND
Måske er du allerede klar over, hvordan du kan manipulere prompt'en for at vise forskellige nyttige informationer, men ikke alle ved, at du kan køre en shell-kommando hver gang prompten vises.
Faktisk bruger mange komplekse prompt-manipulatorer denne variabel til at udføre kommandoer for at indsamle information, der vises i prompt'en.
Prøv at køre dette i en ny shell, og se hvad der sker med sessionen:
$ PROMPT_COMMAND='echo -n "writing the prompt at " && date'2) HISTTIMEFORMAT
Hvis man kører history I konsollen får du en liste over kommandoer, der tidligere er udført under din konto.
$ HISTTIMEFORMAT='I ran this at: %d/%m/%y %T 'Når denne variabel er indstillet, registrerer nye poster tiden sammen med kommandoen, så output vil se sådan ud:
1871 I ran this at: 01/05/19 13:38:07 cat /etc/resolv.conf 1872 I ran this at: 01/05/19 13:38:19 curl bbc.co.uk 1873 I ran this at: 01/05/19 13:38:41 sudo vi /etc/resolv.conf 1874 I ran this at: 01/05/19 13:39:18 curl -vvv bbc.co.uk 1876 I ran this at: 01/05/19 13:39:25 sudo su -
Formateringen svarer til tegnene fra man date.
3) CDPATH
For at spare tid i kommandolinjen kan du bruge denne variabel til at ændre mapper ligeså let, som du kalder kommandoer.
Ligesom PATH, variablen CDPATH er en liste over stier adskilt med kolon. Når du kører en kommando cd med relativ sti (dvs. uden skråstreg i starten), søger shell'en som standard i din lokale mappe for de relevante navne. CDPATH den vil søge i de stier, du har givet, for den mappe, du ønsker at skifte til.
Hvis du sætter CDPATH på denne måde:
$ CDPATH=/:/libog derefter indtaster:
$ cd /home
$ cd tmp så vil du altid komme til /tmp uanset hvor du befinder dig.
Men vær forsigtig, for hvis du ikke angiver din lokale (.) mappe i listen, så kan du ikke oprette nogen anden mappe tmp og skifte til den, som du normalt ville:
$ cd /home
$ mkdir tmp
$ cd tmp
$ pwd
/tmpUps!
Det lyder som en forvirring, jeg havde, da jeg indså, at den lokale mappe ikke var inkluderet i den mere velkendte variabel PATH… men du skal gøre dette i variablen PATH, fordi du kan blive snydt ved at køre en falsk kommando fra en eller anden downloadet kode.
Min er sat til udgangspunkt:
CDPATH=.:/space:/etc:/var/lib:/usr/share:/opt4) SHLVL
Har du nogensinde tænkt på at indtaste sigreturn vil føre dig ud af den nuværende bash-skall til en anden "overordnet" skal eller blot lukke konsolvinduet helt?
Denne variabel sporer, hvor dybt du er begravet i bash-skallen. Hvis du opretter et nyt terminalvindue, er den sat til 1:
$ echo $SHLVL
1Så, hvis du starter en anden shell-proces, stiger tallet:
$ bash
$ echo $SHLVL
2Dette kan være meget nyttigt i scripts, hvor du ikke er sikker på, om du skal logge ud eller ej, eller for at spore, hvor du er i forhold til indlejring.
5) LINENO
Også til at analysere den aktuelle tilstand og debugge er variablen LINENO, som angiver antallet af kommandoer, der er udført i sessionen indtil nu:
$ bash
$ echo $LINENO
1
$ echo $LINENO
2 Dette bruges oftest ved debugging af scripts. Ved at indsætte linjer som echo DEBUG:$LINENO, kan du hurtigt finde ud af, hvor du er i dit script (eller ikke).
6) REPLY
Hvis du, ligesom mig, normalt skriver sådan kode:
$ read input
echo gør noget med $inputkan det komme som en overraskelse, at du slet ikke behøver at bekymre dig om at oprette en variabel:
$ read
echo gør noget med $REPLYDet gør det samme.
7) TMOUT
For ikke at være på produktionsservere for længe af sikkerhedsmæssige årsager eller utilsigtet at køre noget farligt i den forkerte terminal, fungerer opsætningen af denne variabel som en beskyttelse.
Hvis der ikke indtastes noget i det angivne antal sekunder, logger shellen ud.
Det vil sige, at dette er et alternativ til sleep 1 && exit:
$ TMOUT=1Kilde: habr.com
