Sju uventede Bash-variabler

Fortsetter serien med notater om mindre kjente funksjoner i bash, vil jeg vise deg syv variabler du kanskje ikke kjente til.

1) PROMPT_COMMAND

Du er kanskje allerede klar over hvordan du kan manipulere kommandoprompten for å vise ulik nyttig informasjon, men ikke alle vet at hver gang prompten vises, kan en shell-kommando kjøres.

Faktisk bruker mange avanserte prompt-manipulatorer denne variabelen for å kjøre kommandoer for å samle informasjon som vises i prompten.

Prøv å kjøre dette i et nytt skall, og se hva som skjer med sesjonen:

$ PROMPT_COMMAND='echo -n "skriver ut prompten kl. " && date'

2) HISTTIMEFORMAT

Hvis du kjører history i konsollen, får du en liste over kommandoer som tidligere har blitt utført med kontoen din.

$ HISTTIMEFORMAT='Jeg kjørte dette kl: %d/%m/%y %T '

Så snart denne variabelen er satt, registrerer nye oppføringer tiden sammen med kommandoen, så utdataene vil se slik ut:

1871  Jeg kjørte dette kl: 01/05/19 13:38:07 cat /etc/resolv.conf
1872  Jeg kjørte dette kl: 01/05/19 13:38:19 curl bbc.co.uk
1873  Jeg kjørte dette kl: 01/05/19 13:38:41 sudo vi /etc/resolv.conf
1874  Jeg kjørte dette kl: 01/05/19 13:39:18 curl -vvv bbc.co.uk
1876  Jeg kjørte dette kl: 01/05/19 13:39:25 sudo su -

Formateringen tilsvarer symbolene fra man date.

3) CDPATH

For å spare tid i kommandolinjen kan du bruke denne variabelen til å endre kataloger like enkelt som du kaller kommandoer.

Som med PATH, er variabelen CDPATH en liste over stier, separert med kolon. Når du kjører en kommando , kan du sette dette alternativet for å flytte til mappe X, hvis kommando X ikke eksisterer. med relativ bane (dvs. uten skråstrek i starten), vil skalleren som standard se etter passende navn i din lokale mappe. CDPATH vil søke gjennom stiene du har angitt for katalogen du ønsker å gå til.

Hvis du setter CDPATH slik:

$ CDPATH=/:/lib

og så skriver:

$ cd /home
$ cd tmp

vil du alltid havne i /tmp uansett hvor du er.

Men vær forsiktig, fordi hvis du ikke inkluderer den lokale (.) katalogen i listen, vil du ikke kunne opprette noen annen katalog tmp og gå til den som vanlig:

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

Oisann!

Dette minner meg om forvirringen jeg følte da jeg innså at den lokale katalogen ikke var inkludert i den mer kjente variabelen PATH… men du må gjøre det i variabelen PATH, fordi du kan bli lurt til å kjøre en falsk kommando fra noe nedlastet kode.

Min settes som startpunkt:

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

4) SHLVL

Har du noen gang tenkt på å skrive exit vil føre deg ut av den nåværende bash-skallet til et annet "forelderskall" eller bare helt lukke konsollvinduet?

Denne variabelen sporer hvor dypt du er inne i bash-skallet. Hvis du oppretter et nytt terminalvindu, settes den til 1:

$ echo $SHLVL
1

Så hvis du kjører en annen skalprosess, øker tallet:

$ bash
$ echo $SHLVL
2

Dette kan være veldig nyttig i skript der du ikke er sikker på om du skal gå ut eller ikke, eller for å spore hvor du befinner deg i dybden.

5) LINENO

Også for å analysere gjeldende tilstand og feilsøking er variabelen LINENO, som rapporterer antall kommandoer som er utført i sesjonen til nå:

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

Dette brukes oftest ved feilsøking av skript. Ved å sette inn slike linjer som echo DEBUG:$LINENO, kan du raskt identifisere hvor i skriptet du er (eller ikke).

6) REPLY

Hvis du, som jeg, vanligvis skriver slik kode:

$ read input
echo do something with $input

kan det være overraskende at du egentlig ikke trenger å bekymre deg for å lage en variabel:

$ read
echo do something with $REPLY

Dette gjør det samme.

7) TMOUT

For ikke å bli værende for lenge på produksjonsservere av sikkerhetsmessige årsaker, eller ved et uhell kjøre noe farlig i feil terminal, fungerer innstillingen av denne variabelen som en beskyttelse.

Hvis ingenting blir skrevet inn innen et angitt antall sekunder, logges du ut av skallet.

Det vil si at dette er et alternativ til sleep 1 && exit:

$ TMOUT=1

Kilde: habr.com

Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere 🔥 Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere | ProHoster