Eine Shell stellt eine
Kommandozeilen-Schnittstelle zur Interaktion mit dem
Betriebssystem zur Verfügung. Sie empfängt Befehle von einem
Eingabekanal und führt diese aus. Viele Shells bieten
eingebaute Funktionen, die die tägliche Arbeit erleichtern,
beispielsweise eine Dateiverwaltung, die Vervollständigung von
Dateinamen (Globbing), Kommandozeilen-Editor, sowie Makros und
Umgebungsvariablen. FreeBSD enthält einige Shells, darunter die
Bourne Shell (sh(1)) und die verbesserte C-Shell
(tcsh(1)). Weitere Shells, wie zsh
oder
bash
, befinden sich in der
Ports-Sammlung.
Die verwendete Shell ist letztlich eine Frage des
Geschmacks. Ein C-Programmierer, findet vielleicht eine
C-artige Shell wie tcsh(1) angenehmer. Ein
Linux®-Benutzer bevorzugt vielleicht bash
.
Jede Shell hat ihre speziellen Eigenschaften, die mit der
bevorzugten Arbeitsumgebung des Benutzers harmonieren kann oder
nicht. Deshalb stehen mehrere Shells zur Auswahl.
Ein verbreitetes Merkmal in Shells ist die
Dateinamen-Vervollständigung. Nachdem der Benutzer einige
Buchstaben eines Kommandos oder eines Dateinamen eingeben hat,
vervollständigt die Shell den Rest durch
drücken der Tab-Taste. Angenommen, Sie
haben zwei Dateien foobar
und
football
. Um foobar
zu löschen, kann der Benutzer rm foo
eingeben
und Tab drücken um den Dateinamen zu
vervollständigen.
Die Shell wird lediglich rm foo
anzeigen.
Sie konnte den Dateinamen nicht vervollständigen, da sowohl
foobar
als auch
football
mit foo
anfangen. Einige Shells geben einen Signalton aus, oder zeigen
alle Möglichkeiten an, wenn mehr als ein Name mit dem gegebenen
Muster übereinstimmt. Der Benutzer muss dann
weitere Zeichen eingeben, damit die Shell den gewünschten
Dateinamen bestimmen kann. Durch Eingabe von
t
und erneutes Drücken von
Tab ist die Shell in der Lage, den gewünschten
Dateinamen zu vervollständigen.
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. Tabelle 4.4, „Gebräuchliche Umgebungsvariablen“ zeigt verbreitete Umgebungsvariablen und deren Bedeutung. Beachten Sie, dass die Namen der Umgebungsvariablen immer in Großbuchstaben geschrieben sind:
Variable | Beschreibung |
---|---|
USER | Name des angemeldeten Benutzers. |
PATH | Liste mit Verzeichnissen (getrennt durch Doppelpunkt) zum Suchen nach Programmen. |
DISPLAY | Der Name des Xorg-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 Betriebssystems. |
MACHTYPE | Die CPU-Architektur des Systems. |
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 unterscheidet sich
von Shell zu Shell. In tcsh(1) und csh(1) wird dazu
setenv
benutzt. sh(1) und
bash
benutzen export
um
Umgebungsvariablen zu setzen. Dieses Beispiel für die
tcsh(1)-Shell setzt die Variable EDITOR
auf
/usr/local/bin/emacs
:
%
setenv EDITOR /usr/local/bin/emacs
Der entsprechende Befehl für bash
wäre:
%
export EDITOR="/usr/local/bin/emacs"
Um eine Umgebungsvariable zu expandieren, geben Sie in der
Kommandozeile das Zeichen $
vor dessen Namen
ein. Zum Beispiel gibt echo $TERM
den
aktuellen Wert von$TERM
aus.
Shells behandeln Spezialzeichen, so genannte Metazeichen,
als besondere Darstellungen für Daten. Das häufigste Zeichen
ist *
, das eine beliebige Anzahl Zeichen in
einem Dateinamen repräsentiert. Metazeichen können zur
Vervollständigung von Dateinamen (Globbing) benutzt werden.
Beispielsweise liefert echo *
nahezu das
gleiche wie ls
, da die Shell alle Dateinamen
die mit *
übereinstimmen, an
echo
weitergibt.
Um zu verhindern, dass die Shell ein Sonderzeichen
interpretiert, schützt man es, indem man einen
Backslash (\
) voranstellt. Zum Beispiel
zeigt echo $TERM
die Einstellung des
Terminals an, wohingegen echo \$TERM
einfach
die Zeichenfolge $TERM
ausgibt.
Der einfachste Weg die Standard Shell zu ändern, ist
chsh
zu benutzen.
chsh
startet den Editor, welcher durch
die Umgebungsvariable EDITOR
gesetzt ist.
Standardmäßig ist dies vi(1). Tragen Sie in die Zeile
die mit Shell:
beginnt, den absoluten Pfad
der neuen Shell ein.
Alternativ setzt chsh -s
die Shell,
ohne dabei einen Editor aufzurufen. Um die Shell zum Beispiel
auf bash
zu ändern, geben Sie folgenden
Befehl ein:
%
chsh -s /usr/local/bin/bash
Die neue Shell muss in
/etc/shells
aufgeführt sein. Wurde die
Shell aus der FreeBSD Ports-Sammlung installiert, so wie in
Kapitel 5, Installieren von Anwendungen: Pakete und Ports beschrieben, sollte sie automatisch
zu dieser Datei hinzugefügt worden sein. Wenn der Eintrag
fehlt, nutzen Sie folgenden Befehl, und ersetzen Sie den
Pfad mit dem Pfad zur gewünschten Shell:
#
echo
/usr/local/bin/bash
>> /etc/shells
Danach kann chsh(1) erneut aufgerufen werden.
Die UNIX®-Shell ist nicht nur ein Kommandozeileninterpreter, sie ist ein leistungsfähiges Werkzeug, das Benutzern die Ausführung von Befehlen ermöglicht. Es kann die Ein- und Ausgabe umleiten und Befehle miteinander verketten, um die finale Ausgabe zu verbessern. Diese Funktionalität, gepaart mit den eingebauten Befehlen, bietet dem Benutzer eine Umgebung, welche die Effizienz erheblich steigern kann.
Als Redirection bezeichnet man die Umleitung der Ein- oder Ausgabe in einen anderen Befehl oder Datei. Um beispielsweise die Ausgabe des Befehls ls(1) in eine Datei zu schreiben, muss die Ausgabe umgeleitet werden:
%
ls > Verzeichnis_Ausgabe.txt
Die Datei Verzeichnis_Ausgabe.txt
enthält nun den Verzeichnisinhalt. Einige Befehle, wie
beispielsweise sort(1), können verwendet werden um von
der Eingabe zu lesen. Wenn Sie die Ausgabe sortieren möchten,
müssen Sie die Eingabe umleiten:
%
sort < Verzeichnis_Ausgabe.txt
Die Eingabe wird sortiert und auf dem Bildschirm ausgegeben. Um diese Ausgabe wiederum in eine Datei umzuleiten, kann die Ausgabe von sort(1) umgeleitet werden:
%
sort < Verzeichnis_Ausgabe.txt > Sortierte_Ausgabe.txt
In den bisherigen Beispielen wurden für die Umleitung Dateideskriptoren verwendet. Jedes UNIX®-System verfügt über drei Dateideskriptoren: Standardeingabe (stdin), Standardausgabe (stdout) und Stardardfehlerausgabe (stderr). Jeder Deskriptor hat einen bestimmten Zweck. Die Eingabe könnte von einer Tastatur, einer Maus oder einem anderen Eingabegerät stammen. Die Ausgabe könnte der Bildschirm oder ein Drucker sein. Die Standardfehlerausgabe wird zur Diagnose und für Fehlermeldungen verwendet. Alle drei Deskriptoren arbeiten I/O basiert und werden häufig als Streams bezeichnet.
Die Verwendung von Deskriptoren erlaubt es der Shell, die Ein- und Ausgabe von verschiedenen Kommandos umzuleiten und zu teilen. Eine weitere Möglichkeit zur Umleitung bietet der Pipe-Operator.
Der UNIX® Pipe-Operator „|“ wird verwendet, um die Ausgabe eines Kommandos an ein anderes Programm zu übergeben. Grundsätzlich bedeutet dies, dass die Standardausgabe eines Programms als Standardeingabe für ein weiteres Programm verwendet wird. Ein Beispiel:
%
cat Verzeichnis_Auflistung.txt | sort | less
In diesem Beispiel wird der Inhalt von
Verzeichnis_Auflistung.txt
sortiert und
die Ausgabe an less(1) übergeben. Dies erlaubt es dem
Benutzer, die Ausgabe Schritt für Schritt und im eigenen Tempo
zu betrachten.
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>.