Doorgaan met de serie aantekeningen over van bash, laat ik je zeven variabelen zien waarvan je misschien niet wist dat ze bestonden.
1) PROMPT_COMMAND
Misschien weet je al hoe je de prompt kunt manipuleren om verschillende nuttige informatie weer te geven, maar niet iedereen weet dat je elke keer dat de prompt wordt weergegeven een shell-commando kunt uitvoeren.
In feite gebruiken veel complexe prompt-manipulators deze variabele om commando's uit te voeren voor het verzamelen van informatie die in de prompt wordt weergegeven.
Probeer dit in een nieuwe shell uit te voeren en zie wat er met de sessie gebeurt:
$ PROMPT_COMMAND='echo -n "writing the prompt at " && date'2) HISTTIMEFORMAT
Als je history in de console uitvoert, krijg je een lijst met commando's die eerder onder jouw account zijn uitgevoerd.
$ HISTTIMEFORMAT='I ran this at: %d/%m/%y %T 'Zodra deze variabele is ingesteld, worden nieuwe vermeldingen met tijdstempel en commando vastgelegd, zodat de output er zo uitziet:
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 -
De opmaak komt overeen met de symbolen uit man date.
3) CDPATH
Om tijd te besparen in de opdrachtregel, kun je deze variabele gebruiken om mappen net zo gemakkelijk te wijzigen als je commando's aanroept.
Net als PAD, is de variabele CDPATH een lijst van paden, gescheiden door dubbele punt. Wanneer je een commando uitvoert cd met een relatief pad (dus zonder een slash aan het begin), zoekt de shell standaard in je lokale map naar overeenkomende namen. CDPATH Zoek het in de paden die je hebt opgegeven voor de map waarvan je wilt dat deze geopend wordt.
Als je het instelt als: CDPATH $ CDPATH=/:/lib
en vervolgens invoert:$ cd /home $ cd tmp
kom je altijd terecht in ongeacht waar je bent. /tmp Maar wees voorzichtig, want als je de lokale (
) map niet in de lijst opneemt, kun je niet naar een andere map.tmp gaan zoals je normaal zou doen: $ cd /home $ mkdir tmp $ cd tmp $ pwd /tmp
Oeps!Dit lijkt op de verwarring die ik voelde toen ik me gerealiseerd had dat de lokale map niet was opgenomen in de meer vertrouwde variabele
⦠maar je moet dit in de variabele PATH doen, omdat je misleid zou kunnen worden door een valse opdracht die uit een of andere gedownloade code is uitgevoerd. PADMijn begint als:
CDPATH=.:/space:/etc:/var/lib:/usr/share:/opt
SHLVL4) Heb je ooit nagedacht over het invoeren van
exit exit zal je je uit de huidige bash-shell naar een andere 'bovenliggende' shell brengen of het consolevenster gewoon volledig sluiten?
Deze variabele houdt bij hoe diep je in de bash-shell bent genest. Wanneer je een nieuwe terminal opent, is deze ingesteld op 1:
$ echo $SHLVL
1Als je vervolgens een ander shell-proces start, neemt het nummer toe:
$ bash
$ echo $SHLVL
2Dit kan erg nuttig zijn in scripts, waar je niet zeker weet of je moet afsluiten of niet, of om bij te houden waar je bent in de nesting.
5) LINENO
Ook is de variabele LINENOhandig voor het analyseren van de huidige status en debugging, die het aantal commando's meld dat in de sessie tot nu toe is uitgevoerd:
$ bash
$ echo $LINENO
1
$ echo $LINENO
2 Dit wordt meestal gebruikt bij het debuggen van scripts. Door dergelijke regels in te voegen, zoals echo DEBUG:$LINENO, kun je snel bepalen waar je in het script bent (of niet).
6) REPLY
Als je, zoals ik, meestal zulke code schrijft:
$ read input
echo doe iets met $inputkan het een verrassing zijn dat je helemaal geen variabele hoeft te creƫren:
$ read
echo doe iets met $REPLYDit doet hetzelfde.
7) TMOUT
Om niet te lang op productieservers te blijven voor veiligheidsdoeleinden of per ongeluk iets gevaarlijks in de verkeerde terminal uit te voeren, fungeert het instellen van deze variabele als bescherming.
Als er gedurende het ingestelde aantal seconden niets wordt ingevoerd, wordt de shell afgesloten.
Dat wil zeggen, dit is een alternatief voor sleep 1 && exit:
$ TMOUT=1Bron: habr.com
