Next Previous Contents

11. Bash

Als je login een geldige gebruikersnaam en wachtwoordcombinatie geeft, zal het nagaan in /etc/passwd welke shell je aan te bieden. In de meeste gevallen is die op een Linux systeem bash. Het is de taak van bash je opdrachten in te lezen en te zien waarop ze moeten worden toegepast. Het is gelijktijdig een gebruikersinterface en een programmeertaalinterpreter.

Als gebruikersinterface leest het je opdrachten in en voert ze zelf uit als het ``interne'' opdrachten zijn, zoals cd, of zoekt het naar en voert een programma uit als het ``externe'' opdrachten zijn, zoals cp of startx. Het doet ook nog zoiets als het bijhouden van een opdrachthistory en voltooien van bestandsnamen.

We hebben bash reeds in actie gezien als programmeertaalinterpreter. De scripts die init uitvoert om het systeem op te starten zijn gewoonlijk shellscripts, en ze worden door bash uitgevoerd. Een zuivere programmeertaal gecombineerd met de gebruikelijke systeemutility's beschikbaar op de opdrachtregel maakt het een zeer krachtige combinatie, als je weet wat je aan het doen bent. Ik moest bijvoorbeeld een boel ``patches'' toepassen op een directory met broncode. Dit lukte met de volgende opdracht:

for f in /home/greg/sh-utils-1.16*.patch; do patch -p0 < $f; done;

Hiermee worden alle bestanden in mijn homedirectory bekeken waarvan de naam begint met sh-utils-1.16 en eindigt op .patch. Het accepteert dan elk hiervan op z'n beurt en stelt de variabele f hierop in en voert de opdrachten tussen do en done uit. In dit geval waren er 11 patch bestanden, maar het hadden er evengoed 3000 kunnen zijn.

11.1 Configuratie

Het bestand /etc/profile bestuurt het systeemomvattende functioneren van bash. Wat je hierin zet is van invloed op iedereen die op je systeem gebruik maakt van bash. Het voert zaken uit als het toevoegen van directory's aan het PATH, en het stelt de MAIL directoryvariabele in.

Het standaardfunctioneren van het toetsenbord laat vaak veel te wensen over. In feite is het readline die dit afhandelt. Readline is een apart pakket dat opdrachtregelinterfaces afhandelt, voorziet in de opdrachthistorie en bestandsnaamvoltooiing, als ook nog een aantal geavanceerde regelbewerkingsfeatures. Het is in bash gecompileerd. Standaard is readline zo geconfigureerd dat het 't bestand .inputrc in je homedirectory gebruikt. De bash-variabele INPUTRC kan worden gebruikt om dit voor bash te overschrijven. Onder bijvoorbeeld RedHat 6, is INPUTRC in /etc/profile ingesteld op /etc/inputrc. Dit betekent dat de backspace, delete, home en end toetsen voor iedereen goed werken.

Zodra bash het systeemomvattende configuratiebestand heeft ingelezen, zoekt het naar je persoonlijke configuratiebestand. Het controleert je homedirectory op de bestanden .bash_profile, .bash_login en .profile. Het voert het eerste dat het hiervan vindt, uit. Als je de wijze waarop bash functioneert voor jezelf wilt wijzigen, zonder deze wijzigingen door te voeren voor anderen, doe dit dan hier. Bijvoorbeeld: veel toepassingen maken gebruik van omgevingsvariabelen ter besturing van de wijze waarop ze werken. Ik heb de variabele EDITOR ingesteld op vi zodat ik vi kan gebruiken in Midnight Commander (een uitstekende console-gebaseerde bestandsbeheerder) in plaats van de eigen editor.

11.2 Oefeningen

De basisbeginselen van bash zijn makkelijk te leren. Maar laat het hier niet bij: er zit flink wat diepgang in. Leer jezelf de gewoonte aan naar betere manieren op zoek te gaan.

Lees shellscripts, en zoek datgene op wat je niet begrijpt.

11.3 Meer informatie


Next Previous Contents