FreeBSD handboek
Terug | Hoofdstuk 4. UNIX® beginselen | Volgende

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

Terug | Begin | Volgende
Daemons, signalen en het stoppen van processen | Omhoog | Teksteditors