Zeven onverwachte Bash-variabelen

Vervolg van de reeks aantekeningen over minder bekend functies bash, ik zal je zeven variabelen laten zien die je misschien nog niet kent.

1) PROMPT_COMMAND

U weet misschien al hoe u de prompt kunt manipuleren om allerlei nuttige informatie weer te geven, maar niet iedereen weet dat u elke keer dat de prompt wordt weergegeven een shell-opdracht kunt uitvoeren.

Veel complexe promptmanipulators gebruiken deze variabele zelfs om opdrachten uit te voeren om informatie te verzamelen die in de prompt wordt weergegeven.

Probeer dit in een nieuwe shell uit te voeren en kijk wat er met de sessie gebeurt:

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

2) HISTTIMEFORMAT

Als rennen history in de console ontvangt u een lijst met opdrachten die eerder onder uw account zijn uitgevoerd.

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

Zodra deze variabele is ingesteld, registreren nieuwe vermeldingen de tijd samen met de opdracht, zodat de uitvoer er als volgt uitziet:

1871 Ik heb dit uitgevoerd op: 01/05/19 13:38:07 cat /etc/resolv.conf 1872 Ik heb dit uitgevoerd op: 01/05/19 13:38:19 curl bbc.co.uk 1873 Ik heb dit uitgevoerd op : 01/05/19 13:38:41 sudo vi /etc/resolv.conf 1874 Ik heb dit uitgevoerd op: 01/05/19 13:39:18 curl -vvv bbc.co.uk 1876 Ik heb dit uitgevoerd op: 01 /05/19 13:39:25 sudo su -

De opmaak komt overeen met tekens uit man date.

3) CDPATH

Om tijd te besparen op de opdrachtregel, kunt u deze variabele gebruiken om net zo gemakkelijk van map te wisselen als u opdrachten geeft.

Zoals PATH, variabel CDPATH is een door dubbele punten gescheiden lijst met paden. Wanneer u de opdracht uitvoert cd met een relatief pad (d.w.z. geen voorafgaande schuine streep), zoekt de shell standaard in uw lokale map naar overeenkomende namen. CDPATH zal zoeken in de paden die u hebt opgegeven voor de map waar u naartoe wilt.

Als u installeert CDPATH op deze manier:

$ CDPATH=/:/lib

en voer dan in:

$ cd /home
$ cd tmp

dan kom je altijd terecht /tmp maakt niet uit waar je bent.

Wees echter voorzichtig, want als u de lokale niet in de lijst opgeeft (.) map, dan kunt u geen andere map maken tmp en ga er zoals gewoonlijk naar toe:

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

Oeps!

Dit is vergelijkbaar met de verwarring die ik voelde toen ik me realiseerde dat de lokale map niet was opgenomen in de bekendere variabele PATH... maar je moet het in je PATH-variabele doen, omdat je misschien misleid wordt om een ​​nep-commando uit te voeren vanuit een gedownloade code.

De mijne wordt bepaald door het startpunt:

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

4) SHLVL

Heb je je ooit afgevraagd, typen exit Zal het je van je huidige bash-shell naar een andere "ouder"-shell brengen, of zal het gewoon het consolevenster volledig sluiten?

Deze variabele houdt bij hoe diep u zich in de bash-shell bevindt. Als u een nieuwe terminal aanmaakt, wordt deze ingesteld op 1:

$ echo $SHLVL
1

Als u vervolgens een ander shell-proces start, neemt het aantal toe:

$ bash
$ echo $SHLVL
2

Dit kan erg handig zijn in scripts waarvan u niet zeker weet of u deze moet afsluiten of niet, of bij het bijhouden van waar u zich bevindt.

5) LINENO

De variabele is ook nuttig voor het analyseren van de huidige status en het opsporen van fouten LINENO, die het aantal opdrachten rapporteert dat tot nu toe in de sessie is uitgevoerd:

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

Dit wordt meestal gebruikt bij het debuggen van scripts. Lijnen invoegen zoals echo DEBUG:$LINENO, kun je snel bepalen waar je in het script bent (of niet).

6) REPLY

Als je, net als ik, gewoonlijk code als deze schrijft:

$ read input
echo do something with $input

Het kan een verrassing zijn dat u zich helemaal geen zorgen hoeft te maken over het maken van de variabele:

$ read
echo do something with $REPLY

Dit doet hetzelfde.

7) TMOUT

Om te voorkomen dat u om veiligheidsredenen te lang op productieservers blijft of per ongeluk iets gevaarlijks in de verkeerde terminal uitvoert, fungeert het instellen van deze variabele als bescherming.

Als er gedurende een bepaald aantal seconden niets wordt ingevoerd, wordt de shell afgesloten.

Dat wil zeggen, dit is een alternatief sleep 1 && exit:

$ TMOUT=1

Bron: www.habr.com

Voeg een reactie