4.9. Shells
Zurück | Kapitel 4. Grundlagen des UNIX Betriebssystems | Weiter

## 4.9. Shells

Von der tagtäglichen Arbeit mit FreeBSD wird eine Menge mit der Kommandozeilen Schnittstelle der Shell erledigt. Die Hauptaufgabe einer Shell besteht darin, Kommandos der Eingabe anzunehmen und diese auszuführen. Viele Shells haben außerdem eingebaute Funktionen, die die tägliche Arbeit erleichtern, beispielsweise eine Dateiverwaltung, die Vervollständigung von Dateinamen (Globbing), einen Kommandozeileneditor, sowie Makros und Umgebungsvariablen. FreeBSD enthält die Shells `sh` (die Bourne Shell) und `tcsh` (die verbesserte C-Shell) im Basissystem. Viele andere Shells, wie `zsh` oder `bash`, befinden sich in der Ports-Sammlung.

Welche Shell soll ich benutzen? Das ist wirklich eine Geschmacksfrage. Sind Sie ein C-Programmierer, finden Sie vielleicht eine C-artige Shell wie die `tcsh` angenehmer. Kommen Sie von Linux oder ist Ihnen der Umgang mit UNIX® Systemen neu, so könnten Sie die `bash` probieren. Der Punkt ist, dass jede Shell ihre speziellen Eigenschaften hat, die mit Ihrer bevorzugten Arbeitsumgebung harmonieren können oder nicht. Sie müssen sich eine Shell aussuchen.

Ein verbreitetes Merkmal in Shells ist die Dateinamen-Vervollständigung. Sie müssen nur einige Buchstaben eines Kommandos oder eines Dateinamen eingeben und die Shell vervollständigt den Rest automatisch durch drücken der Tab-Taste. Hier ist ein Beispiel. Angenommen, Sie haben zwei Dateien `foobar` und `foo.bar`. Die Datei `foo.bar` möchten Sie löschen. Nun würden Sie an der Tastatur eingeben: `rm fo[Tab]. [Tab]`.

Die Shell würde dann `rm foo[BEEP].bar` ausgeben.

[BEEP] meint den Rechner-Piepser. Diesen gibt die Shell aus, um anzuzeigen, dass es den Dateinamen nicht vervollständigen konnte, da es mehrere Möglichkeiten gibt. Beide Dateien `foobar` und `foo.bar` beginnen mit `fo`, so konnte nur bis `foo` ergänzt werden. Nachdem Sie `.` eingaben und dann die Tab-Taste drückten, konnte die Shell den Rest für Sie ausfüllen.

Ein weiteres Merkmal der Shell ist der Gebrauch von Umgebungsvariablen. Dies sind veränderbare Schlüsselpaare im Umgebungsraum der Shell, die jedes von der Shell aufgerufene Programm lesen kann. Daher enthält der Umgebungsraum viele Konfigurationsdaten für Programme. Die folgende Liste zeigt verbreitete Umgebungsvariablen und was sie bedeuten:

Variable | Beschreibung
--- | ---
`USER` | Name des angemeldeten Benutzers.
`PATH` | Liste mit Verzeichnissen (getrennt durch Doppelpunkt) zum Suchen nach Programmen.
`DISPLAY` | Der Name des X11-Bildschirms, auf dem Ausgaben erfolgen sollen.
`SHELL` | Die aktuelle Shell.
`TERM` | Name des Terminaltyps des Benutzers. Benutzt, um die Fähigkeiten des Terminals zu bestimmen.
`TERMCAP` | Datenbankeintrag der Terminal Escape Codes, benötigt um verschieden Terminalfunktionen auszuführen.
`OSTYPE` | Typ des Betriebsystems, beispielsweise FreeBSD.
`MACHTYPE` | Die CPU Architektur auf dem das System läuft.
`EDITOR` | Vom Benutzer bevorzugter Text-Editor.
`PAGER` | Vom Benutzer bevorzugter Text-Betrachter.
`MANPATH` | Liste mit Verzeichnissen (getrennt durch Doppelpunkt) zum Suchen nach Manualpages.

Das Setzen von Umgebungsvariablen funktioniert von Shell zu Shell unterschiedlich. Zum Beispiel benutzt man in C-artigen Shells wie der `tcsh` dazu `setenv`. Unter Bourne-Shells wie `sh` oder `bash` benutzen Sie zum Setzen von Umgebungsvariablen `export`. Um beispielsweise die Variable `EDITOR` mit `csh` oder `tcsh` auf `/usr/local/bin/emacs` zu setzen, setzen Sie das folgende Kommando ab:

`%` `setenv EDITOR /usr/local/bin/emacs`

Unter Bourne-Shells:

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

Sie können die meisten Shells Umgebungsvariablen expandieren lassen, in dem Sie in der Kommandozeile ein `$` davor eingeben. Zum Beispiel gibt `echo $TERM` aus, worauf `$TERM` gesetzt ist, weil die Shell `$TERM` expandiert und das Ergebnis an `echo` gibt.

Shells behandeln viele Spezialzeichen, so genannte Metazeichen, als besondere Darstellungen für Daten. Das allgemeinste ist das Zeichen `*`, das eine beliebige Anzahl Zeichen in einem Dateinamen repräsentiert. Diese Metazeichen können zum Vervollständigen von Dateinamen (Globbing) benutzt werden. Beispielsweise liefert das Kommando `echo *` nahezu das gleiche wie die Eingabe von `ls`, da die Shell alle Dateinamen die mit `*` übereinstimmen, an `echo` weitergibt.

Um zu verhindern, dass die Shell diese Sonderzeichen interpretiert, kann man sie schützen, indem man ihnen einen Backslash (`\`) voranstellt. `echo $TERM` gibt aus, auf was auch immer Ihr Terminal gesetzt ist. `echo \$TERM` gibt `$TERM` genauso aus, wie es hier steht.

### 4.9.1. Ändern der Shell

Der einfachste Weg Ihre Shell zu ändern, ist das Kommando `chsh` zu benutzen. `chsh` platziert Sie im Editor, welcher durch Ihre Umgebungsvariable `EDITOR` gesetzt ist, im `vi` wenn die Variable nicht gesetzt ist. Ändern Sie die Zeile mit „Shell:“ entsprechend Ihren Wünschen.

Sie können auch `chsh` mit der Option `-s` aufrufen, dann wird Ihre Shell gesetzt, ohne dass Sie in einen Editor gelangen. Um Ihre Shell zum Beispiel auf die `bash` zu ändern, geben Sie das folgende Kommando ein:

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

### Anmerkung:

Die von Ihnen gewünschte Shell muss in `/etc/shells` aufgeführt sein. Haben Sie eine Shell aus der Ports-Sammlung installiert, sollte das schon automatisch erledigt werden. Installierten Sie die Shell von Hand, so müssen Sie sie dort eintragen.

Haben Sie beispielsweise die `bash` nach `/usr/local/bin` installiert, geben Sie Folgendes ein:

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

Danach können Sie `chsh` aufrufen.

Zurück | Nach oben | Weiter
4.8. Dämonen, Signale und Stoppen von Prozessen | Zum Anfang | 4.10. Text-Editoren

Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an <de-bsd-questions@de.FreeBSD.org>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an <de-bsd-translators@de.FreeBSD.org>.