4.9. Shells

In FreeBSD wordt een groot deel van het alledaagse werk gedaan vanuit een omgeving met een commandoregel die shell heet. De grootste taak van een shell is om commando's van het invoerkanaal op te vangen en deze uit te voeren. Veel shells hebben ook functies ingebouwd om mee te helpen om alledaagse taken zoals bestandsbeheer, bestandsglobbing, bestanden wijzigen vanaf de commandoregel, commandomacro's schrijven en uitvoeren en omgevingsvariabelen instellen en wijzigen. FreeBSD heeft een aantal shells bijgeleverd zoals sh, de Bourne Shell en tcsh, de verbeterde C-shell. Er zijn veel andere shells beschikbaar in de FreeBSD Portscollectie zoals zsh en bash.

Welke shell gebruiken? Dit is een kwestie van smaak. Een C–programmeur voelt zich misschien prettiger bij een C–achtige shell, zoals tcsh. Een voormalig Linux® gebruiker of iemand die niet veel ervaring heeft met een UNIX® commandoregel interface wil misschien bash proberen. Elke shell heeft zijn eigen unieke eigenschappen die wel of niet werken voor een bepaalde gebruiker.

Een standaard optie in een shell is bestandsnaam completie. Door het intikken van de eerste paar letters van een commando of bestandsnaam, kan de shell opdracht gegeven worden om automatisch de rest het commando of bestandsnaam toe te voegen met de Tab toets op het toetsenbord. Stel dat er twee bestanden zijn met de namen foobar en foo.bar en foo.bar moet verwijderd worden. Dan kan op het toetsenbord rm fo[Tab].[Tab] ingevoerd worden.

De shell geeft rm foo[BEEP].bar weer.

De [BEEP] geeft aan dat de shell in staat was om de bestandsnaam te completeren omdat er meer dan één soortgelijk bestand was. foobar en foo.bar beginnen met fo, maar het was in staat om het af te maken tot foo. Na het invoeren van een . en daarna Tab, is de shell in staat om de rest van de bestandsnaam aan te vullen.

Een andere optie van de shell is het gebruik van omgevingsvariabelen. Omgevingsvariabelen zijn variabele sleutelparen die opgeslagen zijn in de omgevingsruimte van een shell. Deze ruimte kan uitgelezen worden door elk programma dat door de shell wordt uitgevoerd en bevat dus veel programmainstellingen. Hieronder staat een lijst van standaard omgevingsvariabelen en wat ze betekenen:

Variabele Omschrijving
USER Gebruikersnaam van de gebruiker die is aangemeld.
PATH Een lijst van mappen, gescheiden door een : voor het zoeken naar binaire bestanden.
DISPLAY Netwerknaam van het X11 scherm om verbinding mee te maken, indien beschikbaar.
SHELL De huidige shell.
TERM De naam van de huidige gebruikersterminal. Gebruikt om de mogelijkheden van de terminal te bepalen.
TERMCAP Databaseregel met terminal escape codes voor het uitvoeren van diverse terminalfuncties.
OSTYPE Type besturingssysteem, bijvoorbeeld FreeBSD.
MACHTYPE De CPU architectuur waar het systeem op draait.
EDITOR De teksteditor waar de gebruiker de voorkeur aan geeft.
PAGER De tekstpager waar de gebruiker de voorkeur aan geeft.
MANPATH Lijst van mappen gescheiden door een : voor het zoeken naar handleidingen.

Het instellen van omgevingsvariabelen verschilt van shell tot shell. In de C–achtige shells zoals tcsh en csh moet setenv gebruikt worden om omgevingsvariabelen in te stellen. In Bourne-shells zoals sh en bash moet export gebruikt worden om de omgevingsvariabelen in te stellen. Om bijvoorbeeld de omgevingsvariabele EDITOR te wijzigen naar /usr/local/bin/emacs onder csh of tcsh moet het volgende gedaan worden:

% setenv EDITOR /usr/local/bin/emacs

In Bourne shells is dat:

% export EDITOR="/usr/local/bin/emacs"

Met de meeste shells kunnen de omgevingsvariabelen ook weergegeven worden door een $ karakter voor de variabelenaam te plaatsen op de commandoregel. echo $TERM zou weergeven wat er in $TERM gezet is, omdat de shell $TERM uitbreid en het resultaat doorgeeft aan echo.

Shells kennen veel speciale karakters, die meta-karakters heten, als speciale weergaves van data. De meest voorkomende is het karakter * karakter, dat elk karakter in een bestandsnaam voorstelt. Deze speciale meta-karakters kunnen gebruikt worden om bestandsnaamglobbing te doen. Door bijvoorbeeld echo * in te voeren, is het resultaat bijna hetzelfde als door het uitvoeren van ls, omdat de shell alle bestanden die van toepassing zijn aan echo geeft om ze daarna te tonen.

Om te voorkomen dat de shell deze speciale tekens verwerkt, kunnen ze uitgeschakeld worden door er het backslash karakter (\) voor te plaatsen. echo $TERM print de inhoud van TERM naar het scherm. echo \$TERM print $TERM zoals het geschreven is.

4.9.1. Shell wijzigen

De makkelijkste manier om de shell te wijzigen is door het chsh commando te gebruiken. Door chsh te starten wordt de editor gestart die in de EDITOR omgevingsvariable staat. Als deze niet is ingesteld, wordt vi gestart. In de editor kan de regel waarop “Shell:” staat gewijzigd worden.

Aan chsh kan ook de optie -s meegegeven worden. Dit stelt de shell in, zonder dat een editor gebruikt hoeft te worden. Als de shell bijvoorbeeld gewijzigd moet worden in bash, kan dat als volgt:

% chsh -s /usr/local/bin/bash

Opmerking: De te gebruiken shell moet geregistreerd zijn in /etc/shells. Als een shell uit de Portscollectie is geïnstalleerd, is dit meestal automatisch gebeurd. Als de shell met de hand is geïnstalleerd moet het onderstaande gedaan worden.

Als bijvoorbeeld bash met de hand geïnstalleerd is in /usr/local/bin, dient het onderstaande te gebeuren:

# echo "/usr/local/bin/bash" >> /etc/shells

Hierna kan chsh weer gedraaid worden.