Was ist csh? Grundlagen der C shell
Autor: Redaktion Domeny.ForSale Veröffentlicht
Kurz erklärt: csh, die C shell, ist eine System-Shell: ein Programm, das eingegebene Befehle interpretiert und andere Programme auf Unix-Systemen und verwandten Systemen startet. Sie ermöglicht interaktives Arbeiten und das Ausführen von Skripten. Ihre Syntax ähnelt teilweise der Sprache C. Du kannst ihr in älteren Umgebungen, technischen Werkzeugen und bestehenden Skripten begegnen; für ein neues Administrationsskript ist Bash oder sh meist praktischer.
Wozu dient csh und wie unterscheidet sie sich vom Terminal?
Ein Terminal ist eine textbasierte Oberfläche, in der du Befehle eingibst und Ergebnisse abliest. Die Shell arbeitet innerhalb dieser Umgebung: Sie liest Befehle, löst verkürzte Schreibweisen auf, verarbeitet Umleitungen und startet Programme. Ein geöffnetes Terminalfenster bedeutet daher noch nicht, dass du csh verwendest — darin kann Bash, Zsh oder eine andere Shell laufen.
C shell entstand an der University of California in Berkeley; ihr Hauptentwickler ist Bill Joy. Der Name bezieht sich darauf, dass einige Kontrollstrukturen denen der Sprache C ähneln, nicht darauf, dass die Shell C-Code ausführen kann. Eine C-Quelldatei lässt sich mit csh nicht wie ein gewöhnliches Skript starten.
Mit csh kannst du zwischen Verzeichnissen wechseln, Werkzeuge starten, sie über Pipes verbinden und Ergebnisse in Dateien umleiten. Die Shell unterstützt außerdem einen Befehlsverlauf, Aliase — also eigene Kurzformen für Befehle — und die Verwaltung von Aufgaben, die im Hintergrund laufen.
Viele einfache Befehle sehen in verschiedenen Shells gleich aus. Beispielsweise startet ls ein Programm, das den Inhalt eines Verzeichnisses anzeigt. Unterschiede werden bei Variablen, Bedingungen, Schleifen und der Umleitung von Fehlermeldungen wichtig.
Wie sieht die Syntax von csh aus?
In csh setzt du eine gewöhnliche Variable mit set und eine Umgebungsvariable mit setenv. Eine Umgebungsvariable wird an gestartete Programme weitergegeben und kann dadurch deren Verhalten beeinflussen.
set name = "Anna"
echo "Hallo, $name"
setenv APP_MODE test
Die erste Variable wird hier verwendet, um eine Meldung zusammenzustellen. Die zweite stellt gestarteten Programmen APP_MODE=test zur Verfügung; ob das eine Wirkung hat, hängt davon ab, ob das jeweilige Programm diese Variable ausliest.
Eine Beispielschleife in csh sieht so aus:
foreach farbe (rot gruen blau)
echo "Farbe: $farbe"
end
Diese Schleife gibt drei Zeilen aus. In Bash funktioniert sie nicht unverändert, weil Bash eine andere Schleifenkonstruktion verwendet. Ebenso ist eine Anweisung aus einer Bash-Anleitung, etwa export APP_MODE=test, nicht der richtige Weg, um in csh eine Umgebungsvariable zu setzen.
Übernimm keine ganzen Skriptabschnitte von einer Shell in eine andere, ohne die Syntax zu prüfen. Dass ein einzelner Befehl wie echo kompatibel ist, bedeutet nicht, dass das gesamte Skript kompatibel ist.
Wie prüfst du, ob csh auf deinem System vorhanden ist?
Auf einem Unix-System kannst du prüfen, ob das Programm über den aktuellen Suchpfad für Befehle erreichbar ist:
which csh
Wenn du einen Pfad wie /bin/csh erhältst, kann das System den Befehl unter diesem Namen finden. Bleibt die Ausgabe leer, bedeutet das nicht unbedingt, dass das Programm nicht installiert ist: Es kann außerhalb der Verzeichnisse liegen, die die Shell durchsucht. Auch die Verfügbarkeit des Werkzeugs which und die Form der Meldung hängen vom System ab.
Der Befehl echo $SHELL zeigt gewöhnlich den Pfad der Login-Shell an, also der dem Benutzer zugewiesenen Standard-Shell. Damit lässt sich die aktuell laufende Shell nicht zuverlässig bestimmen, denn nach dem manuellen Start einer anderen Shell kann der Wert dieser Variablen unverändert bleiben.
Ist csh verfügbar, startet die Eingabe von csh eine zusätzliche Shell-Sitzung. Mit exit kehrst du zur vorherigen zurück. Zum Ausprobieren ist das einfacher, als die Standard-Shell des Benutzerkontos zu ändern. Eine Installationsanleitung findest du am besten in der Dokumentation des jeweiligen Systems.
Csh, tcsh, Bash und sh — welche Shell wählen?
tcsh ist eine Weiterentwicklung von csh, die weitgehend mit ihr kompatibel ist und erweiterte Funktionen für die interaktive Arbeit bietet, darunter das Bearbeiten der Befehlszeile und die Vervollständigung von Namen. Auf manchen Systemen startet der Befehl csh tatsächlich tcsh. Bei der Fehlersuche zählt deshalb die tatsächliche Implementierung, nicht nur der Befehlsname.
| Shell | Wann sie sinnvoll ist |
|---|---|
| csh | Pflege von Skripten und Umgebungen, die die Syntax der C shell benötigen. |
| tcsh | Interaktives Arbeiten in einer Umgebung, die auf der csh-Familie basiert. |
| Bash | Neue Skripte, wenn Bash auf den Zielrechnern verfügbar ist. |
| sh | Portable Skripte mit einer Syntax, die dem POSIX-Standard entspricht. |
POSIX ist eine Familie von Standards, die gemeinsame Schnittstellen von Unix-Systemen beschreiben, darunter das Verhalten der Shell. Csh ist nicht mit der Syntax der POSIX-Shell kompatibel. Die Empfehlung, für neue Skripte Bash oder sh zu verwenden, beruht vor allem auf der Portabilität und darauf, dass sich gängige Werkzeuge und Beispiele für Administrationsaufgaben leichter nutzen lassen — nicht darauf, dass csh keine Aufgaben automatisieren könnte.
Wie führst du eine für csh vorgesehene Datei aus?
Eine Datei mit der Endung .csh enthält gewöhnlich ein C-shell-Skript. Die Endung allein sagt jedoch nicht sicher aus, was darin steht. Einen Hinweis liefert die erste Zeile, beispielsweise #!/bin/csh. Das ist der Shebang: eine Angabe, die den Interpreter festlegt, der beim direkten Start einer ausführbaren Datei verwendet wird.
Nachdem du den Inhalt einer vertrauenswürdigen Datei geprüft hast, kannst du sie ausdrücklich mit csh starten:
csh skrypt.csh
Dafür muss die Datei keine Ausführungsberechtigung haben, wohl aber eine Leseberechtigung. Das Skript läuft mit den Rechten des Benutzers, der es startet. Teste eine unbekannte Datei deshalb nicht mit sudo.
Wenn die Projektanleitung csh verlangt, prüfe zunächst, ob die Shell verfügbar ist und welche Anforderungen das Projekt stellt. Ersetze den Aufruf nicht einfach durch bash skrypt.csh — ein anderer Interpreter übersetzt die Syntax des Skripts nicht.
Siehe auch: Was passiert, wenn eine Domain abläuft?
