Syv uventede Bash-variabler

Fortsetter serien med notater om mindre kjent funksjoner bash, jeg skal vise deg syv variabler du kanskje ikke visste om.

1) PROMPT_COMMAND

Du vet kanskje allerede hvordan du manipulerer ledeteksten for å vise diverse nyttig informasjon, men ikke alle vet at du kan kjøre en shell-kommando hver gang ledeteksten vises.

Faktisk bruker mange komplekse ledetekstmanipulatorer denne variabelen til å utføre kommandoer for å samle informasjon som vises i ledeteksten.

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

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

2) HISTTIMEFORMAT

Hvis du løper history i konsollen vil du motta en liste over kommandoer som tidligere er utført under kontoen din.

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

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

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

Formatering samsvarer med tegn fra man date.

3) CDPATH

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

som PATH, variabel CDPATH er en kolon-separert liste over stier. Når du kjører kommandoen cd med en relativ bane (dvs. ingen innledende skråstrek), som standard ser skallet i din lokale mappe for samsvarende navn. CDPATH vil søke i banene du ga etter katalogen du vil gå til.

Hvis du installerer CDPATH på denne måten:

$ CDPATH=/:/lib

og skriv deretter inn:

$ cd /home
$ cd tmp

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

Vær imidlertid forsiktig, for hvis du ikke spesifiserer den lokale i listen (.)-mappen, vil du ikke kunne opprette noen annen mappe tmp og gå til det som vanlig:

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

Oops!

Dette ligner på forvirringen jeg følte da jeg innså at den lokale mappen ikke var inkludert i den mer kjente variabelen PATH... men du må gjøre det i PATH-variabelen din fordi du kan bli lurt til å kjøre en falsk kommando fra en nedlastet kode.

Min er satt av utgangspunktet:

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

4) SHLVL

Har du noen gang lurt på å skrive exit vil det ta deg ut av ditt nåværende bash-skall til et annet "foreldre"-skall, eller vil det bare lukke konsollvinduet helt?

Denne variabelen holder styr på hvor dypt nestet du er i bash-skallet. Hvis du oppretter en ny terminal, er den satt til 1:

$ echo $SHLVL
1

Deretter, hvis du starter en annen shell-prosess, øker tallet:

$ bash
$ echo $SHLVL
2

Dette kan være veldig nyttig i skript der du ikke er sikker på om du skal avslutte eller ikke, eller holde styr på hvor du er nestet.

5) LINENO

Variabelen er også nyttig for å analysere gjeldende tilstand og feilsøking LINENO, som rapporterer antall kommandoer utført i økten så langt:

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

Dette brukes oftest ved feilsøking av skript. Sette inn linjer som echo DEBUG:$LINENO, kan du raskt finne ut hvor i skriptet du er (eller ikke).

6) REPLY

Hvis du, som meg, vanligvis skriver kode slik:

$ read input
echo do something with $input

Det kan komme som en overraskelse at du ikke trenger å bekymre deg for å lage variabelen i det hele tatt:

$ read
echo do something with $REPLY

Dette gjør det samme.

7) TMOUT

For å unngå å være for lenge på produksjonsservere av sikkerhetsgrunner eller ved et uhell kjøre noe farlig i feil terminal, fungerer denne variabelen som en beskyttelse.

Hvis ingenting skrives inn i løpet av et bestemt antall sekunder, går skallet ut.

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

$ TMOUT=1

Kilde: www.habr.com

Legg til en kommentar