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.
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.
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.