csh(1) csh(1)
NAME
csh - C-Shell
SYNTAX
csh [option ...] [datei [argument ...]]
BESCHREIBUNG
Die C-Shell csh ist wie die Standard-(Bourne-)Shell sh ein Kommando-
Interpreter und bietet ebenso wie sh auch die wesentlichen Elemente
einer Programmiersprache. Bei der C-Shell ist die Syntax dieser Pro-
grammiersprache der Syntax der Programmiersprache C sehr ähnlich
(daher auch der Name).
Wie die Bourne-Shell kennt auch die C-Shell Ein-/Ausgabe-Umlenkung und
Variablen, ersetzt an gewünschten Stellen Kommandos durch ihre Aus-
gabe, ersetzt Muster durch passende Dateinamen und anderes mehr. Im
interaktiven Gebrauch bietet die C-Shell mehr Möglichkeiten als die
Bourne-Shell, z. B.
- Vervollständigung von Dateinamen und Benutzerkennungen
- History-Ersetzung
- Alias-Namen für Komandos
- Auftragssteuerung (Job Control).
Darüber hinaus hat die C-Shell eine Reihe von eingebauten Kommandos,
die in der Bourne-Shell nicht enthalten sind.
OPTIONEN
-b (b - break) Argumente, die nach dieser Option stehen, werden
nicht als Optionen für csh interpretiert. Damit können Sie beim
csh-Aufruf Optionen an eine Shell-Prozedur übergeben, ohne daß
sie als Optionen für csh interpretiert werden.
-c Zusammen mit dieser Option müssen Sie für datei den Namen einer
Shell-Prozedur angeben. Alle auf datei folgenden argumente werden
als Argumente für datei angesehen und in der Variablen argv
gespeichert. Es wird eine Subshell erzeugt, die die Shell-Proze-
dur ausführt.
-e (e - exit) csh wird sofort beendet, wenn ein Kommando nicht ord-
nungsgemäß beendet wird oder einen Endestatus ungleich 0 zurück-
gibt.
-f (f - fast start) Beim Start wird weder die Datei .cshrc noch die
Datei .login gelesen.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
-f nicht angegeben:
Beim Start wird die Datei .cshrc gelesen; wird csh als Login-
Shell gestartet, wird außerdem die Datei .login gelesen.
-i (i - interactive) csh gibt das Bereitzeichen für Kommandoeingaben
aus, selbst wenn die Standardeingabe anscheinend kein Terminal
ist.
-n (n - no execution) csh liest und interpretiert alle Kommandos,
führt sie aber nicht aus.
Diese Option ist nützlich, um C-Shell-Prozeduren auf Syntaxfehler
zu überprüfen.
-s (s - standard input) csh liest die Kommandos von der Standardein-
gabe.
-t csh liest nur eine einzige Kommandozeile und führt sie aus. Ist
die Kommandozeile, die Sie eingeben wollen, länger als eine Ein-
gabezeile, so können Sie das Neue-Zeile-Zeichen mit einem Gegen-
schrägstrich \ entwerten.
-v (v - verbose) Die vordefinierte Variable verbose wird gesetzt.
Das bewirkt, daß csh jede Kommandoeingabe auf die Standardfehler-
ausgabe schreibt, und zwar nach der History-Ersetzung, vor ande-
ren Ersetzungen und vor der Kommandoausführung.
-V Die Variable verbose wird gesetzt, bevor die Datei .cshrc gelesen
wird.
-x Die vordefinierte Variable echo wird gesetzt. Das bewirkt, daß
csh jede Kommandoeingabe auf die Standardfehlerausgabe schreibt,
und zwar nach allen Ersetzungen, direkt vor der Kommandoausfüh-
rung.
-X Die Variable echo wird gesetzt, bevor die Datei .cshrc gelesen
wird.
datei [argument ...]
datei [argument ...] können Sie nur dann angeben, wenn Sie keine
der Optionen -i, -s, -t angeben.
datei ist der Name des Kommandos oder der Shell-Prozedur, die
ausgeführt werden soll. datei wird als 0-tes Argument übergeben.
argument
Argument für das Kommando bzw. die Shell-Prozedur datei. Sie
können mehrere Argumente angeben. Die Argumente werden der
Variablen argv zugewiesen.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
datei [argument ...] nicht angegeben:
csh liest die Kommandos von der Standardeingabe.
FUNKTIONSWEISE UND GEBRAUCH DER C-SHELL
Dieser Abschnitt ist in folgende Unterabschnitte gegliedert:
⊕ Starten und Beenden der C-Shell
- Die Dateien .cshrc, .login und .logout
⊕ Interaktiver Ablauf
- Bereitzeichen der C-Shell
- Wie bearbeitet die C-Shell die Kommandozeile?
⊕ Nicht-interaktiver Ablauf
⊕ Vervollständigung von Dateinamen und Benutzerkennungen
⊕ Lexikalische Analyse
- Aufteilung der Kommandozeile in Worte
⊕ Parsen der Kommando-Eingabezeile
- Einfache Kommandos
- Pipelines
- Pipelines verknüpfen
- Pipelines klammern
- Kommandos bzw. Pipelines, die im Hintergrund ablaufen
⊕ History-Ersetzung
⊕ Alias-Namen für Komandos
⊕ Umlenkung der Ein-/Ausgabe
⊕ Variablen-Ersetzung
- Variablen ausgeben, definieren und löschen
- Variablen, die die Shell benutzt
- Auf den Wert einer Variablen zugreifen
- Entwertungszeichen und Variablen-Ersetzung
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
- Zeitpunkt der Variablen-Ersetzung
- Shell-Parameter
⊕ Kommandos durch ihre Ausgabe ersetzen
⊕ Muster durch passende Dateinamen ersetzen
⊕ Ausdrücke und Operatoren
- Klammer-Operator
- Arithmetische Operatoren
- Logische Operatoren
- Vergleichsoperatoren
- Dateieigenschaften abfragen
- Abfragen, ob ein Kommando erfolgreich ausgeführt wurde
⊕ Ablaufsteuerung
- Schleifen und Verzweigungen
⊕ Kommandoausführung
- Wie sucht die C-Shell nach einem Kommando?
- Wie wird das Kommando ausgeführt?
⊕ Signalbehandlung
⊕ Auftragssteuerung (Job Control)
- Auftrag und Auftragsnummer
- Wie können Sie den Status von Aufträgen ändern?
- Wie bezeichnen Sie einen bestimmten Auftrag?
- Ein-/Ausgabe bei Hintergrundaufträgen
- Wie meldet die C-Shell Status-Änderungen von Aufträgen?
⊕ Eingebaute C-Shell-Kommandos
- Die eingebauten Kommandos :, alias, bg, cd, chdir, dirs, echo,
eval, exec, exit, fg, glob, hashstat, history, jobs, kill,
limit, login, logout, nice, nohup, notify, onintr, popd, pushd,
rehash, repeat, set, setenv, shift, source, stop, suspend, time,
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
umask, unalias, unhash, unlimit, unset, unsetenv, wait, % und @.
- Ablaufanweisungen
⊕ Umgebungsvariablen und vordefinierte Shell-Variablen
⊕ C-Shell-Prozeduren
- Was ist eine C-Shell-Prozedur?
- C-Shell-Prozeduren starten
- Kommentare
- Welches Programm führt die Prozedur aus?
Starten und Beenden der C-Shell
Wenn die C-Shell gestartet wird, führt sie normalerweise (siehe Option
-f) die Kommandos aus, die in der Datei .cshrc in Ihrem HOME-Verzeich-
nis stehen. Dazu muß diese Datei lesbar sein, und Sie müssen entweder
der Eigentümer der Datei sein, oder Ihre reale Gruppennummer muß mit
der Gruppennummer der Datei übereinstimmen.
Wird die C-Shell mit einem Namen gestartet, der mit einem Bindestrich
- beginnt, läuft sie als Login-Shell ab (z. B. wenn sie von login auf-
gerufen wird). In diesem Fall führt die C-Shell zunächst die Kommandos
in der Datei .cshrc aus und dann zusätzlich die Kommandos in der Datei
.login in Ihrem HOME-Verzeichnis. Für die .login-Datei benötigen Sie
dieselben Rechte wie für die .cshrc-Datei. Die .login-Datei enthält in
der Regel Kommandos, die den Terminaltyp und die Umgebung festlegen.
Wenn eine Login-C-Shell beendet wird, führt sie die Kommandos aus, die
in der Datei .logout in Ihrem HOME-Verzeichnis stehen. Hierfür benöti-
gen Sie wieder dieselben Rechte wie für die .cshrc-Datei.
Interaktiver Ablauf
Nach erfolgreichem Start gibt eine interaktive C-Shell das Bereitzei-
chen rechnername% (für normale Benutzer) bzw. rechnername# (für den
Systemverwalter) aus. Das Bereitzeichen können Sie mit Hilfe der
Variablen prompt ändern.
Nach Ausgabe des Bereitzeichens liest die Shell die Kommandos, die
über das Terminal eingegeben werden. Die Shell bearbeitet jede Einga-
bezeile wie folgt:
1. Die Zeile wird in Worte aufgeteilt (siehe Lexikalische Analyse).
2. Diese Wortfolge wird in die History-Liste gesetzt (siehe History-
Ersetzung).
Seite 5 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
3. Die Wortfolge wird geparst (siehe Parsen der Kommando-Eingabe-
zeile).
4. Alias-Namen werden ersetzt (siehe Alias-Namen für Kommandos).
5. History-Befehle werden aufgelöst (siehe History-Ersetzung).
6. Variablen werden ersetzt (siehe Variablen-Ersetzung).
7. Muster für Dateinamen werden ersetzt (siehe Muster durch passende
Dateinamen ersetzen).
8. Die Ein-/Ausgabe wird gegebenenfalls umgelenkt (siehe Umlenkung
der Ein-/Ausgabe).
9. Kommandos in Gegenhochkommata `...` werden durch ihre Ausgabe
ersetzt (siehe Kommandos durch ihre Ausgabe ersetzen).
10. Die Shell führt die Kommandos in der Eingabezeile aus (siehe Kom-
mandoausführung).
Nicht-interaktiver Ablauf
Wenn die C-Shell nicht-interaktiv abläuft, gibt sie kein Bereitzeichen
aus. Eine nicht-interaktive C-Shell führt entweder ein Kommando aus,
das beim csh-Aufruf als Argument mitgegeben wurde, oder führt die Kom-
mandos einer Shell-Prozedur aus.
Vervollständigung von Dateinamen und Benutzerkennungen
Wenn die Variable filec gesetzt ist, kann eine interaktive C-Shell
einen nur teilweise eingegebenen Dateinamen oder eine nur teilweise
eingegebene Benutzerkennung vervollständigen:
- Ist ein teilweise eingegebener Dateiname eindeutig und folgt ihm
ein ESC-Zeichen, dann fügt die Shell die fehlenden Zeichen an und
vervollständigt ihn so zu einem passenden Dateinamen des aktuellen
Verzeichnisses.
- Folgt einem teilweise eingegebenen Dateinamen ein EOF-Zeichen
<CTRL-D>, listet die Shell alle passenden Dateinamen des aktuellen
Verzeichnisses auf. Anschließend gibt sie wieder das Bereitzeichen
zusammen mit der unvollständigen Kommandozeile aus, damit Sie einen
der aufgelisteten Dateinamen eingeben können.
- Wenn das letzte Wort der Kommandozeile nur teilweise eingegeben
ist, wenn es mit einer Tilde ~ beginnt und wenn ihm ein ESC-Zeichen
folgt, dann versucht die Shell dieses Wort zu ~benutzerkennung zu
vervollständigen, wobei benutzerkennung eine existierende Benutzer-
kennung ist (siehe Muster durch passende Dateinamen ersetzen).
Seite 6 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
Folgt dem teilweise eingegebenen Wort ein EOF-Zeichen <CTRL-D>,
listet die Shell alle passenden Benutzerkennungen auf. Anschließend
gibt sie wieder das Bereitzeichen zusammen mit der unvollständigen
Kommandozeile aus, damit Sie eine der aufgelisteten Kennungen ein-
geben können.
Treten dabei Fehler auf oder passen zu einer unvollständigen Eingabe
mehrere Dateinamen bzw. Benutzerkennungen, so ertönt die Terminal-
glocke. Dies können Sie verhindern, indem Sie die Variable nobeep set-
zen.
Sie können außerdem Dateinamen mit bestimmten Suffixen ausschließen,
indem Sie diese Suffixe in der Variablen fignore auflisten. Wenn
jedoch der unvollständige Dateiname nur zu einem Dateinamen mit einem
solchen Suffix vervollständigt werden kann (es sonst also keine andere
Möglichkeit gibt), dann wird dieser Dateiname nicht ignoriert. Der
Inhalt der Variablen fignore hat keinen Einfluß auf die Liste der
Dateinamen, die bei einem EOF-Zeichen ausgegeben wird.
Siehe Beispiel 1 und 2 am Ende der C-Shell-Beschreibung.
Lexikalische Analyse
Die C-Shell teilt jede Eingabezeile nach den folgenden Regeln in Worte
auf:
- Worttrenner sind normalerweise Leer- und Tabulatorzeichen.
- Die Sonderzeichen &, |, ;, <, >, ( und ) bilden jeweils ein eigenes
Wort; treten diese Zeichen als Paar auf (z. B. || oder >> oder |&),
bildet ein solches Paar ein Wort. Sind diese Zeichen mit einem vor-
angestellten Gegenschrägstrich \ entwertet, können sie Teil eines
anderen Wortes sein (z. B. ist a\|b ein Wort, a|b sind drei Worte).
- Ein Neue-Zeile-Zeichen, dem ein Gegenschrägstrich vorangestellt
ist, hat die gleiche Bedeutung wie ein Leerzeichen.
- Eine Zeichenkette, die in Hochkommata '...', Anführungszeichen
"..." oder Gegenhochkommata `...` eingeschlossen ist, bildet ein
Teilwort. Sonderzeichen (einschließlich Leer- und Tabulatorzei-
chen), die in einer solchen Zeichenkette vorkommen, bilden kein
eigenes Wort. Ein Neue-Zeile-Zeichen, das innerhalb von Hochkommata
'...', Anführungszeichen "..." oder Gegenhochkommata `...` steht
und dem ein Gegenschrägstrich vorangestellt ist, wirkt wie ein
Neue-Zeile-Zeichen (nicht wie ein Leerzeichen).
- Wenn die Shell nicht vom Terminal liest, leitet das Nummernzeichen
# einen Kommentar ein; der Kommentar endet mit der Eingabezeile.
Die Shell ignoriert alle Zeichen, die zum Kommentar gehören (siehe
C-Shell-Prozeduren).
Seite 7 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
Ist dem Nummernzeichen ein Gegenschrägstrich \ vorangestellt oder
steht es innerhalb von Hochkommata '...', Anführungszeichen "..."
oder Gegenhochkommata `...`, verliert es seine Sonderbedeutung als
Kommentarzeichen.
Beispiel:
Die beiden Kommandos
who>/tmp/whoson
who>>/tmp/whoson
bestehen aus je drei Worten: who, > bzw. >> und /tmp/whoson.
Das Kommando
"who am I"
besteht aus nur einem Wort; die C-Shell interpretiert dieses
Wort who am I als Namen eines Programms, das ausgeführt werden
soll.
Parsen der Kommando-Eingabezeile
Für die C-Shell ist die Kommando-Eingabezeile folgendermaßen aufge-
baut:
- Ein einfaches Kommando besteht aus einer Folge von Worten. Das
erste Wort (das nicht Teil einer Ein-/Ausgabe-Umlenkung ist)
bezeichnet das Kommando, das ausgeführt werden soll. Alle weiteren
Worte, die keine Sonderbedeutung für die C-Shell haben, werden dem
auszuführenden Kommando als Argumente übergeben.
- Ein einfaches Komando oder eine Folge von einfachen Kommandos, die
durch | oder |& voneinander getrennt sind, bilden eine Pipeline.
Dabei bedeutet:
kommando1|kommando2
Die Standardausgabe von kommando1 wird in die Standardeingabe
von kommando2 umgelenkt.
kommando1|&kommando2
Die Standardausgabe und die Standardfehlerausgabe von
kommando1 werden beide in die Standardeingabe von kommando2
umgelenkt.
- Mehrere Pipelines können durch einen Strichpunkt ;, durch && oder
durch || miteinander verbunden werden. Dabei bedeutet:
pipeline1;pipeline2
Die beiden Pipelines werden hintereinander ausgeführt.
Seite 8 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
pipeline1&&pipeline2
Zuerst wird pipeline1 ausgeführt. pipeline2 wird nur dann aus-
geführt, wenn pipeline1 erfolgreich ausgeführt wurde.
pipeline1||pipeline2
Zuerst wird pipeline1 ausgeführt. pipeline2 wird nur dann aus-
geführt, wenn pipeline1 nicht erfolgreich ausgeführt wurde.
- Eine Pipeline oder eine Folge von Pipelines kann in runde Klammern
(...) eingeschlossen werden. Dadurch entsteht ein einfaches Kom-
mando, das wieder Teil einer Pipeline oder Folge von Pipelines sein
kann.
- Ist an eine Folge von Pipelines das Zeichen & angefügt, wird sie
asynchron, d. h. im Hintergrund, ausgeführt. In diesem Fall wartet
die Shell nicht, bis die Folge ausgeführt ist, sondern gibt die
Auftragsnummer, die zugehörigen Prozeßnummern und dann sofort das
Bereitzeichen aus (siehe Auftragssteuerung).
History-Ersetzung
Mit Hilfe der History-Ersetzung können Sie früher eingegebene Komman-
dozeilen nochmals ausführen lassen oder Worte aus früher eingegebenen
Kommandozeilen in der aktuellen Kommandozeile verwenden. Damit können
Sie Schreibfehler leicht korrigieren und komplizierte Kommandos
schnell wiederholen.
Die C-Shell speichert die eingegebenen Kommandozeilen in der History-
Liste. Die Größe dieser Liste wird durch den Wert der Variablen
history bestimmt. Das zuletzt eingegebene Kommando wird auf jeden Fall
in der Liste gespeichert.
Eine früher eingegebene Kommandozeile, die in der History-Liste gespei-
chert ist, wird Ereignis genannt. Jedes Ereignis erhält eine Ereignis-
nummer. Die Nummern werden in aufsteigender Reihenfolge vergeben.
History-Befehle können Sie überall in einer Kommandozeile eingeben;
Sie können History-Befehle jedoch nicht schachteln.
Jeder History-Befehl bezieht sich auf ein bestimmtes Ereignis (siehe
Ereignis-Bezeichner). Um einen History-Befehl auszuführen, durchsucht
die Shell die History-Liste rückwärts vom letzten bis zum ersten
Ereignis. Hat sie das gewünschte Ereignis gefunden, wählt sie gegebe-
nenfalls bestimmte Worte aus (siehe Wort-Bezeichner) und ändert diese
gegebenenfalls ab (siehe Parameter). Die so entstehende Zeichenkette
setzt sie anstelle des History-Befehls in die aktuelle Kommandozeile
ein. Die Kommandozeile, die sich dadurch ergibt, wird dann in die
History-Liste gesetzt und außerdem auf den Bildschirm ausgegeben. Dann
erst führt die Shell gegebenenfalls weitere Ersetzungen durch (z. B.
Variablen-Ersetzungen, Ersetzung von Mustern durch passende Dateinamen
usw.) und führt das Kommando aus. Siehe Beispiele 3 bis 7 am Ende der
C-Shell-Beschreibung.
Seite 9 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
Ein History-Befehl hat das folgende Format:
______________________________________________________________________
![Ereignis-Bezeichner][:Wort-Bezeichner][:Parameter ...]
______________________________________________________________________
! startet die History-Ersetzung, es sei denn, dem Ausrufezeichen
folgt ein Leerzeichen, Tabulatorzeichen, Neue-Zeile-Zeichen,
Gleichheitszeichen = oder eine öffnende runde Klammer (.
Mit der Variablen histchars können Sie statt ! ein anderes Zeichen
für den Beginn eines History-Befehls definieren. Mit einem vorange-
stellten Gegenschrägstrich heben Sie die Sonderbedeutung dieses
Zeichens auf.
In speziellen Fällen können History-Befehle auch mit einem Dach ^
beginnen, siehe Kurzschreibweise.
Ereignis-Bezeichner
Mit einem Ereignis-Bezeichner bezeichnen Sie eine bestimmte Kommando-
zeile (Ereignis) in der History-Liste. Folgende Ereignis-Bezeichner
sind zulässig:
! bezeichnet das vorhergehende Ereignis.
Beispiel: Der History-Befehl !! wiederholt die vorhergehende Kom-
mandozeile.
n bezeichnet das Ereignis mit der Nummer n.
-n bezeichnet das aktuelle Ereignis minus n.
str bezeichnet das letzte Ereignis, das mit str beginnt.
?str[?]
bezeichnet das letzte Ereignis, das str enthält.
Das Trennzeichen ?, das auf str folgt, dürfen Sie weglassen, wenn
unmittelbar auf str ein Neue-Zeile-Zeichen folgt.
Fehlt der Ereignis-Bezeichner, so bezeichnet der History-Befehl
- entweder die zuletzt eingegebene Kommandozeile
- oder, falls unmittelbar vorher bereits ein History-Befehl eingege-
ben wurde, die Kommandozeile, auf die sich dieser History-Befehl
bezog.
Seite 10 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
Der Ereignis-Bezeichner darf jedoch nur dann fehlen, wenn nach dem
Ausrufezeichen, mit dem der History-Befehl beginnt, kein Leer-,
Tabulator-, Neue-Zeile- oder Gleichheitszeichen und keine öffnende
runde Klammer folgt.
Beispiel:
!:1 !$ !:3:s/d/dat/ sind gültige History-Befehle.
! ist kein gültiger History-Befehl. Wollen Sie die zuletzt
eingegebene Kommandozeile nochmals ausführen, verwenden Sie
den History-Befehl !!.
Wort-Bezeichner
Auf einen Ereignis-Bezeichner kann, getrennt durch einen Doppelpunkt,
ein Wort-Bezeichner folgen. Der Doppelpunkt darf fehlen, wenn der
Wort-Bezeichner mit ^, $, *, - oder % beginnt.
Mit einem Wort-Bezeichner wählen Sie ein oder mehrere Worte in der
Kommandozeile aus. Folgende Wort-Bezeichner sind zulässig:
# die ganze bisher eingegebene Kommandozeile
0 das erste Wort (d. h. der Kommandoname)
n das n-te Argument
^ das erste Argument (entspricht 1)
$ das letzte Argument
% das Wort, das beim letzten ?str-Suchlauf gefunden wurde
n-m n-tes bis m-tes Argument einschließlich
-m Abkürzung für 0-m
n* Abkürzung für n-$
n- wie n*, aber ohne das letzte Argument
* alle Argumente oder nichts, wenn das Ereignis nur ein einziges
Wort enthält
Parameter
Auf den Ereignis-Bezeichner (bzw. den Wort-Bezeichner, falls vorhan-
den) können ein oder mehrere Parameter folgen. Die Parameter sind
voneinander und vom Ereignis- bzw. Wort-Bezeichner durch einen Doppel-
punkt zu trennen (Ausnahme: Parameter g).
Seite 11 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
Vorsicht:
Parameter können bei der Ersetzung von Kommandos durch ihre Aus-
gabe nicht auf die Ausgabe angewendet werden.
Wenn Sie Parameter im Zusammenhang mit Variablen-Ersetzung ver-
wenden, gibt es zwei Einschränkungen: Es sind nicht alle Parame-
ter verfügbar, und pro Ersetzung ist nur ein einziger Parameter
erlaubt.
Folgende Parameter sind verfügbar:
h (h - head) Löscht die letzte Komponente des Pfadnamens.
t (t - tail) Löscht alle führenden Komponenten des Pfadnamens, so daß
nur die letzte Komponente übrigbleibt.
r (r - root) Löscht ein Suffix der Form .xxx im Dateinamen.
e Löscht den ganzen Pfadnamen außer das Suffix.
s/l/r[/]
(s - substitute) Ersetzt die Zeichenkette l durch r. Ist der Para-
meter g nicht angegeben, wird die Änderung nur auf die erste zu l
passende Zeichenkette angewandt. Paßt keine Zeichenkette, wird ein
Fehler gemeldet.
Als Trennzeichen können Sie statt des Schrägstrichs / auch jedes
andere Zeichen verwenden; das Zeichen wird dadurch als Trennzeichen
definiert, daß es unmittelbar auf s folgt. Wollen Sie das Trennzei-
chen auch in den Zeichenketten l oder r verwenden, müssen Sie es
mit einem Gegenschrägstrich \ entwerten.
Ein kommerzielles Und & in der Ersetzungszeichenkette r ist ein
Sonderzeichen: Es wird durch die Zeichenkette l ersetzt. Mit einem
Gegenschrägstrich \ können Sie das Sonderzeichen & entwerten.
Ist die Zeichenkette l leer, wird für l entweder die Zeichenkette l
des letzten Kommandos s oder die Zeichenkette str des letzten Kom-
mandos !?str genommen.
Das Trennzeichen, das auf r folgt, dürfen Sie weglassen, wenn
unmittelbar auf r ein Neue-Zeile-Zeichen folgt.
& Wiederholt die letzte Ersetzung.
g (g - global) Diesen Parameter geben Sie unmittelbar vor einem der
Parameter h, t, r, e, s, & an (z. B. gr oder gs oder g&). Die Ände-
rung wird dann auf die erste passende Zeichenkette in jedem Wort
angewandt. (Vorsicht: Sie wird nicht auf alle passenden Zeichenket-
ten angewandt!)
Seite 12 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
p (p - print) Das durch die History-Ersetzung entstehende Kommando
wird in die History-Liste gesetzt und auf den Bildschirm ausgege-
ben, aber nicht ausgeführt.
q (q - quote) Die ersetzten Worte werden entwertet, so daß weitere
Ersetzungen verhindert werden.
x Wie q, nur gelten Leer-, Tabulator- und Neue-Zeile-Zeichen als
Worttrenner.
Klammern {...}
Mit geschweiften Klammern {...} grenzen Sie einen History-Befehl von
nachfolgenden Zeichen, die nicht zu dem Befehl gehören, ab:
!{...}zeichenkette
Siehe Beispiel 6 am Ende der C-Shell-Beschreibung.
Kurzschreibweise
^l^r[^]
Dies ist die Kurzschreibweise für den History-Befehl !:s^l^r[^]
(ersetze in der vorherigen Kommandozeile bzw. in der Kommando-
zeile, die der letzte History-Befehl bezeichnet hat, die Zeichen-
kette l durch die Zeichenkette r). Siehe Beispiel 7 am Ende der
C-Shell-Beschreibung.
Mit der Variablen histchars können Sie statt ^ ein anderes Zei-
chen für diese Kurzschreibweise definieren.
Alias-Namen für Kommandos
Mit Hilfe von Alias-Namen können Sie oft benutzte Kommandofolgen abge-
kürzt eingeben. Einen Alias-Namen definieren Sie mit dem eingebauten
C-Shell-Kommando alias:
alias alias-name alias-definition
Die C-Shell trägt den Alias-Namen und die zugehörige Alias-Definition
in eine Liste ein. Mit dem Kommando alias (ohne Argumente) können Sie
sich die Liste ausgeben lassen. Mit unalias löschen Sie Einträge aus
der Liste. (Siehe Beispiel 8 am Ende der C-Shell-Beschreibung.)
Argumente können Sie in der Alias-Definition folgendermaßen angeben:
- Konstante Argumente geben Sie direkt an.
Beispiel: alias cpr cc -c prog.c
Der Aufruf cpr ergibt dann cc -c prog.c.
Seite 13 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
- Für Argumente, die erst in der Kommando-Eingabezeile angegeben wer-
den sollen, geben Sie in der Alias-Definition Platzhalter in Form
von History-Befehlen an. Dabei müssen Sie jedem History-Befehl
einen Gegenschrägstrich \ voranstellen, damit die Shell den Befehl
nicht schon bei der Ausführung des alias-Kommandos, sondern erst
bei der Auflösung des Alias-Namens ersetzt.
Beispiel: alias gpw grep \!^ /etc/passwd
Der Aufruf gpw anna ergibt dann grep anna /etc/passwd.
Sollen solche variablen Argumente nicht innerhalb der Alias-
Definition, sondern danach eingesetzt werden, brauchen Sie keinen
History-Befehl anzugeben.
Beispiel: alias lld ls -ld
Der Aufruf lld dir ergibt dann ls -ld dir.
Die Shell löst Alias-Namen in Kommandozeilen folgendermaßen auf: Nach-
dem sie die Kommandozeile in einzelne Kommandos zerlegt hat, prüft sie
in jedem Kommando das erste Wort. Ist dieses Wort ein gültiger Alias-
Name, liest die Shell die zugehörige Alias-Definition. Enthält die
Alias-Definition History-Befehle, ersetzt die Shell diese Befehle,
wobei sie die ursprüngliche Kommandozeile mit dem Alias-Namen als
zuletzt eingegebenes Kommando interpretiert. Enthält die Alias-Defini-
tion keine History-Befehle, fügt die Shell die Argumentliste der
ursprünglichen Kommandozeile an die Alias-Definition an. Siehe Bei-
spiel 8 und 9 am Ende der C-Shell-Beschreibung.
Alias-Einträge können Sie schachteln, d. h. eine Alias-Definition kann
einen anderen Alias-Namen enthalten. Solche Schachtelungen werden aus-
gewertet, bevor History-Ersetzungen ausgeführt werden. Dies ist nütz-
lich bei Pipelines wie z. B.
alias lm 'ls -l \!* | more'
(Siehe Beispiel 10 am Ende der C-Shell-Beschreibung.)
Enthält die Alias-Definition zum Alias-Namen name1 einen anderen
Alias-Namen name2, so darf in der Definition zu name2 der Alias-Name
name1 nicht vorkommen, da dies bei der Alias-Ersetzung eine Schleife
ergeben würde. Die Shell entdeckt solche Schleifen und meldet einen
Fehler.
Eine Alias-Definition darf auch den "eigenen" Alias-Namen enthalten,
aber nur als erstes Wort. Dies ergibt keine Schleife, da die Shell in
diesem Fall nach der ersten Alias-Ersetzung aufhört und nicht nach
weiteren Alias-Namen sucht (siehe Beispiel 11 am Ende der C-Shell-
Beschreibung).
Seite 14 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
Umlenkung der Ein-/Ausgabe
Mit den folgenden Ausdrücken können Sie die Standardeingabe, Standard-
ausgabe und Standardfehlerausgabe umlenken. Für Dateinamen, die auf
diese Ausdrücke folgen, führt die Shell die Variablen-Ersetzung, die
Ersetzung von Kommandos durch ihre Ausgabe sowie die Ersetzung von
Mustern durch passende Dateinamen getrennt vom Rest des Kommandos
durch. Für die Zeichenkette wort (siehe <<wort) führt sie diese Erset-
zungen nicht durch.
Wenn Sie die Standardausgabe und die Standardfehlerausgabe getrennt
umlenken wollen, müssen Sie wie folgt eine Subshell aufrufen:
(kommando > ausgabedatei) >& fehlerdatei
< Die Standardeingabe wird umgelenkt.
<<wort
Die Standardeingabe wird bis zu einer Zeile, die genau aus wort
besteht, gelesen. Die gelesenen Zeilen werden in einer Temporär-
datei abgelegt. Ist wort nicht mit Gegenschrägstrich oder Anfüh-
rungszeichen entwertet, bearbeitet die Shell dann diese Zeilen:
Sie ersetzt Variablen durch ihren Wert und Kommandos, die in
Gegenhochkommata eingeschlossen sind, durch ihre Ausgabe.
Anschließend erhält das Kommando, für das die Standardeingabe
umgelenkt wurde, die Temporärdatei als Standardeingabe.
> >! >& >&!
Die Standardausgabe wird in eine Datei umgelenkt. Existiert die
Datei noch nicht, wird sie angelegt. Existiert sie bereits, wird
ihr Inhalt überschrieben; der bisherige Inhalt ist damit verlo-
ren.
Ist die Variable noclobber gesetzt, verhindert sie, daß existie-
rende Dateien gelöscht werden. Die Variable verhindert außerdem
die Umlenkung auf ein Terminal oder in den "Papierkorb"
/dev/null, es sei denn, Sie verwenden die Ausdrücke mit Ausrufe-
zeichen. Mit den &-Ausdrücken wird sowohl die Standardausgabe als
auch die Standardfehlerausgabe in die Datei umgelenkt.
>> >>! >>& >>&!
Diese Ausdrücke wirken wie die obigen mit einfachem >, nur wird
die Standardausgabe an die Datei angehängt. Existiert die Datei
bereits, wird ihr Inhalt also nicht überschrieben.
Ist die Variable noclobber gesetzt, meldet die Shell einen Feh-
ler, wenn die Datei noch nicht existiert, es sei denn, Sie ver-
wenden die Ausdrücke mit Ausrufezeichen. Mit den &-Ausdrücken
wird sowohl die Standardausgabe als auch die Standardfehleraus-
gabe an die Datei angehängt.
Seite 15 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
Variablen-Ersetzung
Variablen der C-Shell bestehen aus einem Namen und einem Wert.
Der Name einer Variablen ist eine Zeichenkette, die aus Buchstaben,
Ziffern und Unterstrich _ bestehen kann. Der Name kann bis zu 20 Zei-
chen enthalten; das erste Zeichen muß entweder ein Buchstabe oder ein
Unterstrich sein.
Der Wert einer Variablen ist eine Liste von null, ein oder mehreren
Worten, die durch Leer- oder Tabulatorzeichen voneinander getrennt
sind. Wenn Sie bei der Variablendefinition die Wortliste in runde
Klammern eingeschlossen haben, können Sie mit $var[index] bzw.
${var[index]} auf die einzelnen Listenelemente zugreifen (siehe
Shell-Parameter und Beispiel 12 am Ende der C-Shell-Beschreibung).
Die C-Shell unterscheidet zwischen Umgebungsvariablen und Shell-Vari-
ablen: Umgebungsvariablen werden automatisch exportiert, d. h. aufge-
rufenen Prozessen bekanntgemacht, Shell-Variablen nicht (siehe Umge-
bungsvariablen und vordefinierte Shell-Variablen). Was im vorliegenden
Abschnitt Variablen-Ersetzung gesagt wird, gilt für beide Arten von
Variablen, sofern nicht explizit zwischen beiden unterschieden wird.
Variablen ausgeben, definieren und löschen
Mit dem eingebauten C-Shell-Kommando set können Sie sich bereits defi-
nierte Variablen ausgeben lassen und neue Variablen definieren. Mit
dem Kommando unset löschen Sie Variablen.
Variablen, die die C-Shell benutzt
Einige Variablen sind vordefiniert und werden von der C-Shell verwal-
tet und benutzt. Zum Beispiel enthält die Variable argv die Argument-
liste der Shell.
Bei einigen Variablen, die die Shell benutzt, ist der Wert, den sie
haben, bedeutungslos; von Bedeutung ist nur, ob sie definiert sind
oder nicht. Eine solche Variable ist z. B. die Variable verbose: Ist
ihr irgendein Wert zugewiesen (es kann auch ein leerer Wert sein),
wird jedes eingegebene Kommando nach der History-Ersetzung auf den
Bildschirm ausgegeben.
Die vordefinierten Variablen sind in Umgebungsvariablen und vordefi-
nierte Shell-Variablen beschrieben.
Auf den Wert einer Variablen zugreifen
Den Wert einer Variablen erhalten Sie, indem Sie dem Variablen-Namen
ein Dollarzeichen $ voranstellen:
$name
Seite 16 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
Der Ausdruck $name ist ein Shell-Parameter. Die Shell ersetzt einen
Parameter in der Kommandozeile durch den Wert, den die entsprechende
Variable aktuell hat. Sie können auch bestimmte Worte des Variablen-
werts auswählen oder sich andere Informationen über die Variable aus-
geben lassen (siehe Shell-Parameter).
Folgt auf den Namen eines Shell-Parameters ein Buchstabe, eine Ziffer
oder ein Unterstrich _, interpretiert die Shell dieses Zeichen als
Teil des Namens. Mit geschweiften Klammern können Sie den Shell-Para-
meter von anderen Zeichen des Eingabewortes abgrenzen.
Beispiel:
Mit dem Kommando
echo $datei
können Sie sich den Wert der Variablen datei (z. B.
/usr/tabellen/liste) ausgeben lassen. Mit folgendem Kommando
hängen Sie an den Dateinamen die Endung 00 an:
mv $datei ${datei}00
Ohne die geschweiften Klammern würde die Shell nach einer
Variablen datei00 suchen, die vielleicht gar nicht definiert
ist.
Sprechen Sie eine Variable an, die nicht definiert ist, meldet die
Shell normalerweise einen Fehler.
Mit numerischen Variablenwerten können Sie wie mit Zahlen rechnen.
Führen Sie numerische Operationen aus, wird ein leerer Variablenwert
als 0 interpretiert. Besteht der Wert einer Variablen aus mehreren
Worten, so wird bei solchen Operationen nur das erste Wort berücksich-
tigt, die übrigen Worte werden ignoriert.
Entwertungszeichen und Variablen-Ersetzung
Das Dollarzeichen $ können Sie entwerten, indem Sie ihm einen Gegen-
schrägstrich \ voranstellen. Die Variable wird dann nicht ersetzt, es
sei denn, der zugehörige Shell-Parameter steht innerhalb von Anfüh-
rungszeichen "...": Innerhalb von Anführungszeichen werden Variablen
immer ersetzt. Innerhalb von Hochkommata '...' werden Variablen nicht
ersetzt. Das Dollarzeichen wird auch dann entwertet, wenn ihm ein
Leer-, Tabulator- oder Neue-Zeile-Zeichen folgt.
Ist ein Shell-Parameter in Anführungszeichen "..." eingeschlossen,
dann wird er durch den Wert ersetzt. Enthält der Wert Sonderzeichen,
so werden diese so behandelt, als seien sie in Anführungszeichen ein-
geschlossen. Besteht der Wert aus mehreren Worten, erhält man eine
Zeichenkette, die Leerzeichen enthält. Z. B. entspricht die Angabe
"$name" der Angabe "Anna Mueller", wenn Anna Mueller der Wert der
Variablen name ist.
Seite 17 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
Anders ist es, wenn bei der History-Ersetzung der History-Parameter q
angegeben wurde: Besteht der Variablenwert aus mehreren Worten, dann
wird der Shell-Parameter nicht durch eine einzige Zeichenkette
ersetzt, sondern durch eine Liste von Worten, die durch Leerzeichen
voneinander getrennt sind und die jedes für sich entwertet sind, um
Kommando- und Muster-Ersetzung zu verhindern.
Zeitpunkt der Variablen-Ersetzung
Variablen werden normalerweise durch ihren Wert ersetzt, nachdem die
Eingabezeile analysiert, Alias-Namen aufgelöst und Ein-/Ausgabe-
Umlenkungen bearbeitet sind. Anders verhält es sich, wenn
- Variablen bei Ein-/Ausgabe-Umlenkungen im Dateinamen oder bei der
Umlenkung <<wort in den Eingabezeilen vorkommen: Hier werden die
Variablen durch ihren Wert ersetzt, während die Umlenkung stattfin-
det.
- Variablen in Kommandos vorkommen, die in Gegenhochkommata `...`
eingeschlossen sind (siehe Kommandos durch ihre Ausgabe ersetzen).
Erst nachdem die Variablen durch ihren Wert ersetzt sind, ersetzt die
Shell Kommandos in Gegenhochkommata `...` durch ihre Ausgabe und
Muster durch passende Dateinamen. In folgenden Fällen führt die Shell
diese Ersetzungen nicht durch:
- wenn das Kommando bzw. das Muster innerhalb von Anführungszeichen
"..." steht
- wenn die Variable noglob gesetzt ist (verhindert nur die Ersetzung
von Mustern durch passende Dateinamen)
- wenn bei der History-Ersetzung für den betreffenden Text der
History-Parameter q angegeben wurde.
Shell-Parameter
Ein Shell-Parameter wird durch das Dollarzeichen $ eingeleitet. Die
Shell ersetzt einen Parameter in der Kommandozeile durch den Wert, den
die entsprechende Variable aktuell hat.
Im folgenden sind die Shell-Parameter beschrieben, die die C-Shell
kennt.
$var
${var}
Diese Shell-Parameter werden durch den Wert der Variablen var
ersetzt. Besteht der Wert aus mehreren Worten, ist das Ergebnis
eine Liste von Worten, die durch je ein Leerzeichen voneinander
getrennt sind.
Seite 18 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
Ist var eine Umgebungsvariable (siehe Umgebungsvariablen und vor-
definierte Shell-Variablen), wird ihr Wert zurückgegeben;
History-Parameter dürfen Sie auf Umgebungsvariablen nicht anwen-
den.
$var[index]
${var[index]}
Diese Shell-Parameter wählen bestimmte Worte aus dem Variablen-
wert aus. Der Variablenwert muß bei der Variablendefinition in
runde Klammern eingeschlossen worden sein (siehe das eingebaute
C-Shell-Kommando set).
index kann entweder selbst eine Zahl, ein Zahlenbereich zahl-zahl
oder ein Stern * sein oder nach Auswertung eine Zahl, einen Zah-
lenbereich oder einen Stern ergeben. Die Worte des Variablenwerts
werden, bei 1 beginnend, durchnumeriert; der Stern bezeichnet
alle Worte. Gibt index eine Zahl an, die größer als die Anzahl
der Worte ist, aus denen der Variablenwert besteht, meldet die
Shell einen Fehler. Zahlenbereiche können Sie abgekürzt angeben:
-zahl Ist die Abkürzung für 1-zahl.
zahl- Ist die Abkürzung für zahl-anzahl, wobei anzahl die Anzahl
der Worte ist, aus denen der Variablenwert besteht.
Liegt das zweite Argument einer Bereichsangabe im zulässigen
Intervall 1 bis $#var oder fehlt es, dann ist es kein Fehler,
wenn der Bereich leer ist.
$#name
${#name}
Diese Shell-Parameter liefern die Anzahl der Worte, aus denen der
Variablenwert besteht.
$0 Der Shell-Parameter $0 liefert den Namen der Datei, aus der die
Kommandoeingabe gelesen wird. Ist der Name dieser Datei unbe-
kannt, liefert $0 einen Fehler.
$n
${n} Äquivalent zu $argv[n] (siehe die vordefinierte Shell-Variable
argv); n ist eine Zahl größer gleich 1.
$* Äquivalent zu $argv[*] (siehe die vordefinierte Shell-Variable
argv).
$?var
${?var}
Liefert die Zeichenkette 1, falls die Variable var gesetzt ist,
sonst 0.
$?0 Liefert 1, falls der Name der aktuellen Eingabedatei bekannt ist,
sonst 0.
Seite 19 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
$$ Liefert die Prozeßnummer der Vater-Shell.
$< Liefert eine Zeile von der Standardeingabe, ohne daß nachfolgende
Auswertungen durchgeführt werden. Damit können Sie von einer C-
Shell-Prozedur aus von der Tastatur lesen.
Auf folgende der oben angeführten Shell-Parameter können Sie bei der
History-Ersetzung die History-Parameter e, h, q, r, t sowie gh, gt und
gr anwenden. Bei Shell-Parametern mit geschweiften Klammern {...} müs-
sen Sie die History-Parameter innerhalb der Klammern schreiben.
$var bzw. ${var}
$var[index] bzw. ${var[index]}
$#name bzw. ${#name}
$0
$n bzw. ${n}
$*
Kommandos durch ihre Ausgabe ersetzen
Ein Kommando, das in Gegenhochkommata `...` eingeschlossen ist, wird
von einer Subshell ausgeführt. Die Standardausgabe des Kommandos wird
dann in Worte zerlegt; Worttrenner sind Leer-, Tabulator- und Neue-
Zeile-Zeichen, leere Worte werden ignoriert. Innerhalb von Anführungs-
zeichen "..." wirkt nur das Neue-Zeile-Zeichen als Worttrenner, Leer-
und Tabulatorzeichen bleiben erhalten.
Der entstehende Text wird an die Stelle der Zeichenkette in Gegenhoch-
kommata gesetzt.
Das letzte Neue-Zeile-Zeichen wird in jedem Fall ignoriert. Damit ist
es möglich, daß für das Kommando in Gegenhochkommata nur ein Wortteil
eingesetzt wird, auch wenn die Standardausgabe des Kommandos eine
vollständige Zeile geliefert hat.
csh wendet die Ersetzung von Kommandos in Gegenhochkommata `...` durch
ihre Ausgabe und die Ersetzung von Mustern durch passende Dateinamen
getrennt auf die Argumente von eingebauten Kommandos an. Dabei werden
Teilausdrücke, die nicht ausgewertet wurden, auch nicht verändert; nur
auf ausgewertete Ausdrücke werden die Ersetzungen angewandt.
Bei nicht-eingebauten Kommandos führt csh die Ersetzung von Datei-
namen-Mustern im Kommandonamen getrennt von der Ersetzung von Datei-
namen-Mustern in der Argumentliste durch. Die Ersetzung findet in
einer Subshell statt und erst, nachdem Ein-/Ausgabe-Umlenkungen bear-
beitet worden sind.
Muster durch passende Dateinamen ersetzen
Worte,
- die eines der Zeichen * ? [ { enthalten oder
Seite 20 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
- die mit einer Tilde ~ beginnen,
betrachtet die Shell als Muster. Diese Muster wertet sie folgenderma-
ßen aus (siehe auch Beispiel 13 am Ende der C-Shell-Beschreibung):
- Muster, die * ? [ enthalten, ersetzt die Shell durch eine alphabe-
tisch sortierte Liste von Dateinamen, die zu dem Muster passen. Die
Dateinamen gehören zu existierenden Dateien. Die Shell meldet einen
Fehler, wenn zu einem solchen Muster kein Dateiname paßt.
- Das Muster {...} dient als Abkürzung für eine Liste von Zeichenket-
ten. Die Zeichenketten müssen nicht Namen von existierenden Dateien
sein. Die Liste wird nicht sortiert.
- Die Muster ~ und ~benutzerkennung sind eine Abkürzung für ein
HOME-Verzeichnis.
Die Sonderzeichen haben folgende Bedeutung:
* Paßt zu null, einem oder mehreren beliebigen Zeichen.
? Paßt zu einem beliebigen Zeichen.
[s] Paßt zu einem der Zeichen, die in der Zeichenkette s enthalten
sind.
[c1-c2]
Paßt zu einem der Zeichen, die im Zeichenbereich c1-c2 gemäß der
ASCII-Sortierreihenfolge enthalten sind.
{s1,s2,...}
Paßt zu einer der Zeichenketten (oder einem der Dateinamen-
Muster) s1, s2 usw. Anders als bei den Mustern *, ?, [s] und
[c1-c2] wird das Ergebnis der Auswertung von {s1,s2,...} nicht
sortiert.
~ Dies ist eine Abkürzung für Ihr HOME-Verzeichnis, so wie es in
der Variablen home festgelegt ist.
Seite 21 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
~benutzerkennung
Dies ist eine Abkürzung für das HOME-Verzeichnis des angegebenen
Benutzers, so wie es in der Kennwortdatei /etc/passwd festgelegt
ist.
Stehen die oben angegebenen Sonderzeichen innerhalb von Hochkommata
'...' oder Anführungszeichen "..." oder ist ihnen ein Gegenschräg-
strich \ vorangestellt, dann haben die Zeichen keine Sonderbedeutung,
sondern stehen für sich selbst.
Ein Pfadname mit einer Komponente, die mit einem Punkt beginnt (z. B.
/usr/anna/.cshrc), paßt nur dann zu einem Muster, wenn der Punkt im
Muster explizit als Punkt angegeben ist. Schrägstriche müssen im
Muster ebenso explizit angegeben sein.
Eine einzelne öffnende { oder schließende } geschweifte Klammer oder
ein leeres geschweiftes Klammernpaar {} wird nicht ersetzt, sondern
bleibt unverändert.
Weitere Informationen zur Ersetzung von Dateinamen-Mustern finden Sie
bei Kommandos durch ihre Ausgabe ersetzen.
Ausdrücke und Operatoren
Eine Reihe von eingebauten C-Shell-Kommandos verarbeiten Ausdrücke,
deren Operatoren den Operatoren der Programmiersprache C ähnlich sind
und denselben Vorrangregeln genügen. Solche Ausdrücke werden vor allem
bei den Kommandos @, exit, if und while verwendet; oft dienen sie
dazu, den Ablauf von Kommandos zu steuern (siehe Ablaufsteuerung).
Die einzelnen Komponenten eines Ausdrucks werden durch Leer- oder
Tabulatorzeichen getrennt. Für fehlende Werte wird 0 eingesetzt. Das
Ergebnis eines Ausdrucks ist immer eine Zeichenkette; diese Zeichen-
kette kann auch aus einer Dezimalzahl bestehen.
Im folgenden sind die Operatoren beschrieben. Sie sind nach ihrem Vor-
rang in absteigender Reihenfolge geordnet; Operatoren in derselben
Zeile haben gleichen Vorrang.
(...)
Zusammenfassung zu einer Gruppe
! Logische Negation
* / %
Multiplikation, Division, Modulo-Operator (Rest bei ganzzahliger
Division).
Diese Operatoren sind rechts-assoziativ; dies kann zu unerwarte-
ten Ergebnissen führen! Im Zweifelsfall sollten Sie die Ausdrücke
klammern.
Seite 22 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
+ - Addition, Subtraktion.
Auch diese Operatoren sind rechts-assoziativ.
<< >>
Bitweise Verschiebung nach links bzw. rechts
< > <= >=
Kleiner, größer, kleiner oder gleich, größer oder gleich
== != =~ !~
Gleichheit (==), Ungleichheit (!=), Mustervergleich für die
Ersetzung durch passende Dateinamen (=~ und !~). Diese Operatoren
vergleichen ihre Argumente als Zeichenketten.
Die Operatoren =~ und !~ bedeuten: Die Zeichenkette auf der lin-
ken Seite paßt bzw. paßt nicht zu dem Dateinamen-Muster auf der
rechten Seite. Diese beiden Operatoren machen in Shell-Prozeduren
switch-Anweisungen für derartige Mustervergleiche überflüssig.
& Bitweises UND (AND)
^ Bitweises EXKLUSIV-ODER (XOR)
| Bitweises INKLUSIV-ODER (OR)
&& Logisches UND (AND)
|| Logisches ODER (OR)
Die Operatoren == != =~ !~ vergleichen ihre Argumente als Zeichenket-
ten; die übrigen Operatoren arbeiten mit Zahlen.
Darüber hinaus gibt es die folgenden Abfragen zu Dateien:
-r datei
Liefert "wahr" (d. h. 1) zurück, falls Sie Leserecht für datei
besitzen; andernfalls wird "falsch" (d. h. 0) zurückgeliefert.
-w datei
Wahr, wenn Sie Schreibrecht für datei besitzen.
-x datei
Wahr, wenn Sie Ausführrecht (bzw. bei Verzeichnissen das Recht
zum Durchlaufen) für datei besitzen.
-e datei
Wahr, wenn datei existiert.
-o datei
Wahr, wenn Ihnen die Datei gehört.
Seite 23 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
-z datei
Wahr, wenn datei die Länge 0 hat (d. h. leer ist).
-f datei
Wahr, wenn datei eine einfache Datei ist.
-d datei
Wahr, wenn datei ein Verzeichnis ist.
Existiert datei nicht oder kann auf sie nicht zugegriffen werden, lie-
fern alle diese Abfragen "falsch" zurück.
Zusätzlich gibt es eine Abfrage zur erfolgreichen Beendigung eines
Kommandos:
{ kommando }
Läuft kommando erfolgreich ab, liefert der Ausdruck "wahr" (d. h.
1) zurück; andernfalls wird "falsch" (d. h. 0) zurückgeliefert.
Beachten Sie, daß Kommandos bei erfolgreichem Ablauf normaler-
weise 0 als Endestatus zurückliefern und bei Auftreten von Pro-
blemen irgendeinen anderen Wert. Wollen Sie den Status bei Been-
digung eines Kommandos direkt abprüfen, so verwenden Sie statt
dieses Ausdrucks lieber die Variable status.
Ablaufsteuerung
Die Shell enthält eine Reihe von eingebauten Kommandos, mit denen Sie
den Ablauf von Kommandos in Shell-Prozeduren und, in eingeschränktem
Maße, auch vom Terminal aus steuern können. Diese Kommandos veranlas-
sen die Shell entweder, Schleifen auszuführen (z. B. foreach, while),
oder unter bestimmten Bedingungen einen Teil der Eingabe zu übersprin-
gen (Verzweigung, z. B. switch, if). Siehe Eingebaute C-Shell-Komman-
dos, Ablaufanweisungen.
Ist die Eingabe für die Shell nicht an beliebiger Stelle abrufbar und
liest die Shell eine Schleife, wird diese Eingabe gepuffert. Die Shell
kann bestimmte Positionen im Puffer anspringen und die Eingabe wieder-
holt lesen, so wie es die Schleife vorsieht. Soweit es die Pufferung
erlaubt, können auch goto-Kommandos, die rückwärts springen, erfolg-
reich ausgeführt werden.
Kommandoausführung
Ist das Kommando in die C-Shell eingebaut, führt sie es direkt aus.
Andernfalls sucht die Shell nach einer Datei, die den angegebenen
Namen hat und Ausführrecht besitzt. Enthält der Kommandoname einen
Schrägstrich /, interpretiert die Shell den Namen als Pfadnamen und
sucht an der entsprechenden Stelle. Enthält der Kommandoname keinen
Schrägstrich, durchsucht die Shell normalerweise ihre Hash-Tabelle, um
die Datei zu finden. Die Hash-Tabelle ist eine interne Tabelle der
Shell. Sie enthält die Pfadnamen aller ausführbaren Dateien der in der
Seite 24 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
Variablen path aufgelisteten Verzeichnisse. Das aktuelle Verzeichnis
bildet hierbei eine Ausnahme: Die dort enthaltenen Dateien stehen
nicht in der Hash-Tabelle, sondern werden gesondert geprüft. Steht die
Datei weder in der Hash-Tabelle noch im aktuellen Verzeichnis, gibt
die Shell eine Meldung aus, daß die Datei nicht gefunden wurde.
Eine interaktive C-Shell legt die Hash-Tabelle normalerweise in fol-
genden Fällen neu an:
- nachdem sie die Datei .cshrc gelesen hat
- nachdem die Variable path neu gesetzt worden ist
- wenn Sie das eingebaute C-Shell-Kommando rehash aufrufen.
Das Kommando rehash sollten Sie immer dann aufrufen, wenn sich der
Inhalt der Verzeichnisse, die in path eingetragen sind, geändert hat
(z. B. wenn ein neues Kommando hinzugekommen ist).
Die Hash-Tabelle dient dazu, die Suche nach der auszuführenden Datei
zu beschleunigen. Mit den csh-Optionen -c und -t oder mit dem einge-
bauten C-Shell-Kommando unhash können Sie die Verwendung der Hash-
Tabelle verhindern. In diesem Fall fragt die Shell die Variable path
ab und sucht in allen dort angegebenen Verzeichnissen nach der auszu-
führenden Datei.
Spezialfall:
Wenn das auszuführende Kommando eine Shell-Prozedur ist, der
angegebene Name der Prozedur keinen Schrägstrich enthält und das
Wort shell ein Alias-Name ist, dann wird das Ergebnis dieser spät
stattfindenden Alias-Ersetzung ohne Änderungen der Kommandozeile
vorangestellt. Das erste Wort der Alias-Definition sollte ein
vollständiger Pfadname sein. Das System versucht, dieses erste
Wort als Kommando auszuführen. Enthält die Alias-Definition wei-
tere Worte, so werden diese zusammen mit dem Text der Eingabe-
zeile als Argumente behandelt.
Besitzt die gefundene Datei Ausführrechte, erzeugt die Shell mit
fork(2) einen neuen Prozeß und übergibt ihn [über den Systemaufruf
execve(2)] zusammen mit den Argumenten an den Systemkern. Der System-
kern versucht dann, den neuen Prozeß mit dem gewünschten Programm zu
überlagern.
Ist die Datei eine ausführbare Binärdatei [im Format a.out, siehe
a.out(4)], dann gelingt die Überlagerung, und der Kern beginnt, den
neuen Prozeß auszuführen.
Ist die Datei eine Textdatei (Shell-Prozedur) und beginnt ihre erste
Zeile mit #!, wird das darauffolgende Wort als Pfadname einer Shell
(oder eines anderen Kommandos) interpretiert, die die Shell-Prozedur
ausführen soll. Weitere Worte, die in der ersten Zeile stehen, gelten
als Optionen für diese Shell. Der Kern ruft die angegebene Shell auf
Seite 25 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
(überlagert sie) und gibt ihr den Namen der Shell-Prozedur als Argu-
ment mit.
Ist die Datei eine Shell-Prozedur und beginnt ihre erste Zeile nicht
mit #!, dann kann der Systemkern die Datei nicht überlagern, d. h. der
Systemaufruf execve(2) scheitert. In diesem Fall erzeugt csh eine neue
Shell, und zwar
- eine C-Shell csh, falls die erste Zeile der Datei mit einem Num-
mernzeichen # beginnt
- eine Bourne-Shell sh andernfalls;
diese neu erzeugte Shell führt dann die Datei aus.
Signalbehandlung
Normalerweise ignoriert die C-Shell das Signal QUIT. Hintergrundpro-
zesse sind immun gegen Signale, die von der Tastatur aus gegeben wer-
den, auch gegen Hangup-Signale (HUP). Andere Signale haben die Werte,
die die C-Shell aus ihrer Umgebung geerbt hat.
Mit dem eingebauten C-Shell-Kommando onintr können Sie festlegen, wie
die Shell Unterbrechungs- und Beendigungssignale innerhalb von Shell-
Prozeduren behandelt.
Login-Shells fangen das Signal TERM ab. Ist die Shell keine Login-
Shell, wird dieses Signal an Sohnprozesse weitergegeben. In keinem
Fall sind Unterbrechungen möglich, während eine Login-Shell die Datei
.logout liest.
Auftragssteuerung (Job Control)
Die C-Shell ordnet jeder Kommandofolge bzw. Pipeline einen Auftrag zu,
um Kommandos zu verfolgen, die im Hintergrund ablaufen oder mit einem
TSTP-Signal (Terminal-Stopp-Signal, üblicherweise <CTRL-Z>) gestoppt
wurden. Jeder Auftrag erhält eine Auftragsnummer. Wird eine Kommando-
folge bzw. Pipeline mit Hilfe des Zeichens & im Hintergrund gestartet,
gibt die Shell eine Zeile aus, die die Auftragsnummer in eckigen Klam-
mern sowie die Liste der zugehörigen Prozeßnummern enthält, z. B.
[1] 1234
Im Beispiel hat der Auftrag die Auftragsnummer 1 erhalten, und es ist
ihm der Top-Level-Prozeß mit der Prozeßnummer 1234 zugeordnet.
Mit dem eingebauten C-Shell-Kommando jobs können Sie sich die momentan
gültige Liste der Aufträge ausgeben lassen. Der Auftrag, der zuletzt
gestoppt wurde, bzw. (falls kein Auftrag gestoppt wurde) der Auftrag,
der zuletzt in den Hintergrund geschickt wurde, ist der aktuelle Auf-
trag. Er ist in der Liste mit einem Pluszeichen + markiert. Der vor-
hergehende Auftrag ist mit einem Minuszeichen - markiert; er nimmt die
Seite 26 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
Stelle des aktuellen Auftrags ein, wenn dieser beendet oder in den
Vordergrund geholt wird.
Um einen laufenden Auftrag zu stoppen, müssen Sie ihm ein Stopp-Signal
schicken (üblicherweise mit <CTRL-Z>). Sobald die Shell gemeldet hat,
daß der Auftrag gestoppt ist, und das Bereitzeichen ausgegeben hat,
können Sie den Status dieses Auftrags verändern. Hierfür stehen Ihnen
die eingebauten C-Shell-Kommandos bg, fg, kill, stop und % zur Verfü-
gung. Sie können den Auftrag z. B. mit bg in den Hintergrund schicken,
dann einige andere Kommandos ablaufen lassen und anschließend den Auf-
trag mit fg wieder in den Vordergrund holen.
Vorsicht:
Wenn ein Kommando nach einem Stopp wieder gestartet wird, gibt
die Shell das Verzeichnis aus, in dem das Kommando gestartet
wurde, falls dies nicht das aktuelle Verzeichnis ist. Die Ausgabe
der Shell kann jedoch falsch sein, da der Auftrag die Verzeich-
nisse geändert haben könnte.
Eingebaute Shell-Kommandos können nicht gestoppt und wieder
gestartet werden.
Kommandofolgen der Form
kommando1; kommando2; kommando3
sind problematisch: Stoppen Sie kommando2, führt die Shell kom-
mando3 niemals aus. Dies ist besonders dann zu beachten, wenn die
Kommandofolge Ergebnis einer Alias-Ersetzung ist. Sie können das
Problem vermeiden, indem Sie die Folge in runde Klammern (...)
einschließen, so daß sie in einer Subshell ausgeführt wird.
Beim Aufruf der Kommandos bg, fg, kill, stop und % können Sie die Auf-
träge folgendermaßen angeben:
% %+ %%
Der aktuelle Auftrag.
%- Der letzte, vor dem aktuellen Auftrag erteilte Auftrag.
%auftragsnummer
Der Auftrag mit der angegebenen Auftragsnummer.
Beispiel:
Das Kommando kill -9 %3 bricht den Auftrag Nummer 3 ab.
%zeichenkette
Der Auftrag, dessen zugehörige Kommandozeile mit der angegebenen
Zeichenkette beginnt. Die Kommandozeile muß durch zeichenkette
eindeutig bestimmt sein.
Seite 27 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
Beispiel:
Das Kommando fg %vi holt einen gestoppten vi-Auftrag in
den Vordergrund.
%?zeichenkette
Der Auftrag, dessen zugehörige Kommandozeile die angegebene Zei-
chenkette enthält. Die Kommandozeile muß durch zeichenkette ein-
deutig bestimmt sein.
Aufträge, die im Hintergrund ablaufen, stoppen, sobald sie versuchen,
vom Terminal zu lesen. Hintergrundaufträge können normalerweise Aus-
gabe produzieren; dies können Sie jedoch verhindern, indem Sie das
Kommando stty tostop eingeben: Die Aufträge stoppen dann, sobald sie
versuchen, etwas auszugeben.
Wie meldet die C-Shell Status-Änderungen von Aufträgen?
Wenn die C-Shell interaktiv abläuft, verfolgt sie den Status jedes
Auftrags und informiert Sie, sobald ein Auftrag beendet oder blockiert
wird. Normalerweise gibt sie die entsprechende Meldung erst unmittel-
bar vor einem Bereitzeichen aus; damit werden Sie bei Ihrer Eingabe
nicht gestört. Ist die Variable notify gesetzt, gibt die Shell Meldun-
gen über Status-Änderungen sofort aus, anstatt auf ein anstehendes
Bereitzeichen zu warten. Dies können Sie auch mit dem eingebauten C-
Shell-Kommando notify erreichen: Mit notify teilen Sie der Shell mit,
daß sie Status-Änderungen von bestimmten Aufträgen sofort anzeigen
soll (siehe Eingebaute C-Shell-Kommandos, notify).
Eingebaute C-Shell-Kommandos
Eingebaute C-Shell-Kommandos werden innerhalb der C-Shell ausgeführt.
Steht ein eingebautes Kommando in einer Pipeline und dort nicht an
letzter Stelle, wird es in einer Subshell ausgeführt.
Die C-Shell enthält die folgenden eingebauten Kommandos:
: Leeres Kommando. Dieses Kommando wird interpretiert, löst aber
keine Aktion aus.
alias [name [def]]
Weist dem Alias-Namen name die Definition def zu. def ist eine
Liste von Worten, die Sonderzeichen für die History-Ersetzung
enthalten dürfen. Diese History-Sonderzeichen müssen Sie mit vor-
angestelltem Gegenschrägstrich entwerten. Für name dürfen Sie
weder alias noch unalias angeben.
def nicht angegeben:
alias gibt den Alias-Namen name zusammen mit seiner Definition
aus.
Seite 28 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
name[def] nicht angegeben:
alias gibt alle Alias-Einträge aus.
Siehe Alias-Namen für Kommandos.
bg [auftrag ...]
(bg - background) bg läßt die angegebenen Aufträge im Hintergrund
laufen. Die Aufträge können Sie angeben, wie in Auftragssteuerung
(Job Control) beschrieben.
auftrag nicht angegeben:
bg läßt den aktuellen Auftrag im Hintergrund laufen (siehe Auf-
tragssteuerung).
cd [dir]
chdir [dir]
dir wird zum aktuellen Verzeichnis.
Ist dir ein relativer Pfadname, der nicht im aktuellen Verzeich-
nis steht, sucht csh in den Verzeichnissen, die in der Variablen
cdpath angegeben sind. Ist dir der Name einer Shell-Variablen,
deren Wert wert mit einem Schrägstrich / beginnt, wird wert zum
aktuellen Verzeichnis.
dir nicht angegeben:
Das HOME-Verzeichnis wird zum aktuellen Verzeichnis.
dirs [-l]
Der Verzeichnis-Stack wird ausgegeben. Die Liste ist von links
nach rechts geordnet, wobei das oberste Verzeichnis des Stack
(das ist das aktuelle Verzeichnis) ganz links in der Liste steht.
-l Die Verzeichnisse werden in voller Länge, d. h. nicht abge-
kürzt, ausgegeben. Haben Sie ein Verzeichnis mit Tilde ~
angegeben (siehe Muster durch passende Dateinamen ersetzen),
wird es in der Liste vollständig ausgeschrieben.
echo [-n] liste
Die Worte, aus denen liste besteht, werden, jeweils durch ein
Leerzeichen getrennt, auf die Standardausgabe der C-Shell
geschrieben. Ist die Option -n nicht angegeben, wird die Ausgabe
mit einem Neue-Zeile-Zeichen abgeschlossen.
-n Am Ende der Wortliste wird kein Neue-Zeile-Zeichen ausgege-
ben.
Seite 29 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
eval argument ...
Die C-Shell führt die in der Argumentliste angegebenen Kommandos
aus. Dabei werden die Argumente zweimal von der Shell bearbeitet:
- das erste Mal, wenn die Shell die eval-Kommandozeile bearbei-
tet.
- das zweite Mal, wenn die Shell die bearbeiteten Argumente als
Kommando ausführt.
Siehe das in die Bourne-Shell sh eingebaute Kommando eval.
exec kommando
Die aktuelle Shell beendet sich; statt dessen wird das angegebene
Kommando ausgeführt.
exit [(ausdruck)]
Die Shell wird mit dem Wert von ausdruck beendet (siehe Ausdrücke
und Operatoren).
(ausdruck) nicht angegeben:
Die Shell wird mit dem Wert der Variablen status beendet.
fg [auftrag ...]
(fg - foreground) fg holt die angegebenen Aufträge in den Vorder-
grund. Die Aufträge können Sie angeben, wie in Auftragssteuerung
(Job Control) beschrieben.
auftrag nicht angegeben:
fg holt den aktuellen Auftrag in den Vordergrund (siehe Auftrags-
steuerung).
glob wortliste
Muster in wortliste werden durch passende Dateinamen ersetzt.
Anschließend wird die Worliste ausgegeben. glob arbeitet wie
echo, nur interpretiert glob Gegenschrägstriche \ nicht als Ent-
wertung für Sonderzeichen. In der Ausgabe werden die Worte durch
NULL-Zeichen voneinander getrennt.
hashstat
hashstat gibt eine Statistik-Zeile aus, die angibt, wie effektiv
die interne Hash-Tabelle bei der Suche der Kommandos im Dateibaum
gewesen ist und wie viele exec-Aufrufe dabei vermieden werden
konnten. Bei der Kommandosuche wird für jedes in der path-Varia-
blen angegebene Verzeichnis,
- für das die Hash-Funktion einen möglichen Treffer angibt oder
- das nicht mit einem Schrägstrich / beginnt,
Seite 30 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
versucht, ein exec auszuführen. (Siehe Kommandoausführung.)
history [-hr] [n]
Die History-Liste wird ausgegeben. Ist für n eine Zahl angegeben,
werden nur die letzten n Ereignisse ausgegeben.
-h Die History-Liste wird ohne die führenden Ereignis-Nummern
ausgegeben. Dies ist nützlich, um Dateien für das Kommando
source -h zu erzeugen (siehe das eingebaute C-Shell-Kommando
source).
-r Die History-Liste wird in umgekehrter Reihenfolge ausgege-
ben, d. h. zuerst erscheint das zuletzt eingegebene Ereig-
nis.
jobs [-l]
Die aktiven Aufträge unter Auftragskontrolle werden ausgegeben.
-l Zusätzlich werden die Prozeßnummern ausgegeben.
kill [-signal] [pid ...] [auftrag ...]
kill [-l]
Das angegebene Signal bzw. das Signal TERM (Signal zur Beendi-
gung) wird an die angegebenen Prozesse oder Aufträge gesendet.
Ist das gesendete Signal TERM oder HUP (Hangup), wird zusätzlich
das Signal CONT (Continue) an die Prozesse/Aufträge gesendet.
Sie müssen mindestens einen Prozeß oder Auftrag angeben, es darf
nicht beides fehlen.
signal Signalnummer oder Signalname.
pid Prozeßnummer.
auftrag Die Aufträge können Sie angeben, wie in Auftragssteue-
rung (Job Control) beschrieben.
-l Die Namen der Signale, die Sie mit kill senden können,
werden aufgelistet.
limit [-h] [ressource [max]]
Mit limit legen Sie für den aktuellen Prozeß und alle von ihm
erzeugten Prozesse einen Grenzwert max für die angegebene Res-
source fest.
Fehlt max, wird der aktuelle Grenzwert für ressource ausgegeben.
Fehlt ressource, werden alle Grenzwerte ausgegeben.
ressource
Für ressource können Sie angeben:
Seite 31 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
cputime Maximale CPU-Zeit, die jeder Prozeß verbrau-
chen darf
filesize Maximale Größe, die eine Datei haben darf
datasize Maximale Größe des Datenbereichs (einschließ-
lich Stack), die für den Prozeß erlaubt ist
stacksize Maximale Stackgröße für den Prozeß
coredumpsize Maximale Größe für eine Core-Dump-Datei
max Für max können Sie eine Zahl, wahlweise gefolgt von einem
Buchstaben für die Maßeinheit angeben oder, bei cputime,
eine Zeitangabe in Minuten und Sekunden:
________________________________________________________
| ressource | max | Bedeutung von max |
|____________________|________|_________________________|
| cputime | n | n Sekunden |
| | _______|_________________________|
| | nm | n Minuten |
| | _______|_________________________|
| | mm:ss | mm Minuten und ss |
| | | Sekunden |
| | _______|_________________________|
| | nh | n Stunden |
|____________________|________|_________________________|
| filesize, datasize,| n | n Kilobyte |
| | _______|_________________________|
| stacksize und | nk | n Kilobyte |
| | _______|_________________________|
| coredumpsize | nm | n Megabyte |
|____________________|________|_________________________|
-h Es werden harte Grenzwerte anstelle der aktuellen Grenzwerte
benutzt. Harte Grenzwerte legen für die aktuellen Grenzwerte
eine Obergrenze fest. Nur der Systemverwalter darf harte
Grenzwerte erhöhen.
login [benutzername]
login [-p]
Beendet eine Login-Shell und ruft und das Kommando login auf. Die
Datei .logout wird nicht ausgeführt. Fehlt benutzername, fordert
login Sie auf, einen Benutzernamen einzugeben.
-p Die aktuelle Umgebung (Variablen) bleibt erhalten.
logout
Beendet eine Login-Shell.
Seite 32 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
nice [+n] [kommando]
Der Prioritätswert für das angegebene Kommando bzw. für die Shell
wird um n erhöht bzw. erniedrigt.
Je höher der Prioritätswert, desto niedriger ist die Priorität
des Prozesses und desto langsamer läuft er ab. Der Bereich für
die Prioritätswerte geht von -20 bis 20. Liegt der angegebene
Wert außerhalb dieses Bereichs, wird für den Prioritätswert 20
bzw. -20 genommen.
+n Der Prioritätswert wird um n erhöht.
-n Der Prioritätswert wird um n erniedrigt. Dieses Argument
darf nur der Systemverwalter angeben.
±n nicht angegeben:
Der Prioritätswert wird auf 4 gesetzt.
kommando
Kommando, für das der Prioritätswert gesetzt werden soll.
Das Kommando wird mit dem gesetzten Wert in einer Subshell
ausgeführt.
Für kommando gelten dieselben Einschränkungen wie für das
Kommando der Ablaufanweisung if (ausdruck) kommando.
kommando nicht angegeben:
nice setzt den Prioritätswert für die aktuelle Shell.
nohup [kommando]
Das angegebene Kommando wird ausgeführt, wobei HUP-Signale igno-
riert werden. kommando läuft immer in einer Subshell ab. Für kom-
mando gelten dieselben Einschränkungen wie für das Kommando der
Ablaufanweisung if (ausdruck) kommando. Ist kein Kommando angege-
ben, werden HUP-Signale für den ganzen Rest der Shell-Prozedur
ignoriert.
Wird ein Prozeß mit & im Hintergrund gestartet, läuft er immer
mit nohup ab.
notify [auftrag ...]
Die C-Shell teilt Ihnen Status-Änderungen der angegebenen Auf-
träge sofort mit, nicht erst unmittelbar vor Ausgabe des Bereit-
zeichens. Die Aufträge können Sie angeben, wie in Auftragssteue-
rung (Job Control) beschrieben.
Seite 33 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
auftrag nicht angegeben:
Die C-Shell teilt Ihnen Status-Änderungen des aktuellen Auftrags
sofort mit. Der aktuelle Auftrag ist der Auftrag, der zuletzt
gestoppt wurde, oder (falls kein Auftrag gestoppt wurde) der Auf-
trag, der zuletzt in den Hintergrund geschickt wurde.
onintr [-]
onintr [marke]
Die Aktionen, mit denen die Shell auf Interrupts reagiert, werden
gesteuert.
Kein Argument angegeben:
onintr setzt die Standard-Aktion ein, mit der die Shell auf
Interrupts reagiert. Die Standard-Aktion besteht darin, daß
die Shell Shell-Prozeduren beendet und auf Kommandoeingaben
vom Terminal wartet.
- Die Shell ignoriert alle Interrupts.
marke
Sobald die Shell einen Interrupt erhält oder sich ein Sohn-
prozeß beendet, weil er einen Interrupt erhielt, führt die
Shell das Kommando goto marke aus.
popd [+n]
popd entfernt das oberste (0-te) Element des Verzeichnis-Stacks
und wechselt mit cd in das Verzeichnis, das nun oben auf dem
Stack liegt.
Die Elemente des Verzeichnis-Stacks sind, bei 0 beginnend, von
der Spitze aus durchnumeriert.
+n popd entfernt das n-te Stack-Element.
pushd [verzeichnis]
pushd [+n]
Legt ein Verzeichnis auf dem Verzeichnis-Stack ab.
Kein Argument angegeben:
Die obersten zwei Stack-Elemente werden vertauscht, und Sie
wechseln mit cd in das Verzeichnis, das nun oben auf dem
Stack liegt.
verzeichnis
Das aktuelle Verzeichnis wird auf dem Stack abgelegt, und
Sie wechseln mit cd in verzeichnis.
+n Das n-te Stack-Element wird oben auf dem Stack abgelegt, und
Sie wechseln mit cd in das betreffende Verzeichnis.
Seite 34 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
rehash
Die interne Hash-Tabelle für die Suche nach Kommandos im Datei-
baum wird aus der Variablen path neu erzeugt. Siehe Kommandoaus-
führung.
repeat n kommando
Das angegebene Kommando wird n-mal ausgeführt.
Für kommando gelten dieselben Einschränkungen wie für das Kom-
mando der Ablaufanweisung if (ausdruck) kommando.
set [var[=wert]]
set var[n]=wort
Kein Argument angegeben:
set gibt die Werte aller Shell-Variablen aus. Werte, die aus
mehreren Worten bestehen, werden als geklammerte Liste aus-
gegeben.
var set var weist der Shell-Variablen var einen leeren Wert
(Null-Wert) zu.
var=wert
set var=wert weist der Shell-Variablen var den Wert wert zu.
Vor und nach dem Gleichheitszeichen dürfen Leer- oder Tabu-
latorzeichen stehen.
wert kann sein:
wort Einzelnes Wort (kann auch eine Zeichenkette in
Anführungszeichen "..." oder Hochkommata '...'
sein)
(wortliste) Geklammerte Liste von Worten, die durch je ein
Leerzeichen voneinander getrennt sind. var
erhält damit einen Wert, der aus mehreren Worten
besteht.
Enthält wert Muster für Dateinamen oder Kommandos einge-
schlossen in Gegenhochkommata `...`, so werden diese durch
die passenden Dateinamen bzw. die Kommandoausgabe ersetzt,
bevor der Wert der Variablen zugewiesen wird.
var[n]=wort
set var[n]=wort weist einer Shell-Variablen var, deren Wert
aus mehreren Worten besteht, wort als n-te Wert-Komponente
zu. Die Variable var und ihre n-te Wert-Komponente müssen
bereits existieren.
Seite 35 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
Die eckigen Klammern müssen Sie angeben (d. h. sie bezeich-
nen hier nicht ein optionales Syntaxelement). Vor und nach
dem Gleichheitszeichen dürfen Leer- oder Tabulatorzeichen
stehen.
Wie bei set var=wert werden vor der Zuweisung Dateinamen-
Muster und Kommandos in `...` ersetzt.
setenv [VAR [wort]]
Kein Argument angegeben:
setenv gibt die Werte aller Umgebungsvariablen aus.
VAR setenv VAR weist der Umgebungsvariablen VAR einen leeren
Wert (Null-Wert) zu.
Üblicherweise werden Umgebungsvariablen mit Großbuchstaben
geschrieben.
VAR wort
setenv VAR wort weist der Umgebungsvariablen VAR den Wert
wort zu. wort ist ein einzelnes Wort (das kann auch eine
Zeichenkette in Anführungszeichen "..." sein).
Die am häufigsten benutzten Umgebungsvariablen USER, TERM
und PATH erhalten ihren Wert automatisch von den C-Shell-
Variablen user, term und path und umgekehrt; diese Variablen
brauchen Sie also nicht mit setenv zu setzen. Darüber hinaus
erhält die Umgebungsvariable PWD automatisch den Wert der
C-Shell-Variablen cwd, wenn sich dieser ändert.
shift [var]
shift verschiebt die Komponenten des Wertes der Variablen var
bzw. argv nach links; die erste Komponente entfällt.
Ist die Variable var bzw. argv nicht gesetzt oder hat sie einen
leeren Wert, wird dies als Fehler interpretiert.
source [-h] datei
source führt Shell-Prozeduren in der aktuellen Shell aus. Es wird
also keine Subshell erzeugt. source liest die Kommandos in datei
und führt sie aus. Sie dürfen mehrere source-Kommandos schach-
teln; ist die Schachtelungstiefe jedoch zu groß, könnten nicht
genug Dateideskriptoren zur Verfügung stehen. Tritt in einer der
Shell-Prozeduren ein Fehler auf, werden alle geschachtelten
source-Kommandos beendet.
-h Die Kommandos aus datei werden auf die History-Liste
gesetzt, jedoch nicht ausgeführt.
Seite 36 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
stop auftrag ...
Stoppt die angegebenen Hintergrund-Aufträge. Die Aufträge können
Sie angeben, wie in Auftragssteuerung (Job Control) beschrieben.
suspend
Stoppt die aktuelle Shell, so als ob ihr mit <CTRL-Z> ein Stopp-
Signal gesendet worden wäre. Dies wird meistens benutzt, um
Shells zu stoppen, die mit su gestartet wurden.
time [kommando]
time führt das angegebene Kommando aus und gibt aus, wieviel Zeit
das Kommando verbraucht hat.
kommando nicht angegeben:
time gibt aus, wieviel Zeit die aktuelle C-Shell und ihre Sohn-
prozesse verbraucht haben.
umask [wert]
umask gibt die aktuell gültige Schutzbit-Maske aus bzw. ändert
sie. Die Schutzbit-Maske legt fest, welche Zugriffsrechte die
Dateien und Verzeichnisse erhalten, die Sie ab jetzt in der aktu-
ellen Shell oder einer ihrer Subshells neu anlegen. Siehe das in
die Bourne-Shell sh eingebaute Kommando umask.
wert 3-stellige Oktalzahl, die die Schutzbit-Maske angibt. Um aus
der Schutzbit-Maske wert die Zugriffsrechte für neu ange-
legte Dateien zu errechnen, wird wert über XOR mit der
Oktalzahl 666, für Verzeichnisse mit 777 verknüpft.
Übliche Werte für die Schutzbit-Maske sind 002 oder 022.
Dies ergibt die folgenden Zugriffsrechte:
002 ergibt für Dateien: rw-rw-r--
für Verzeichnisse: rwxrwxr-x
022 ergibt für Dateien: rw-r--r--
für Verzeichnisse: rwxr-xr-x
unalias muster
Löscht alle Alias-Einträge, deren Alias-Name zu muster paßt, aus
der Alias-Liste. muster ist ein Wort, das Sonderzeichen zur
Dateinamen-Ersetzung enthalten kann (siehe Muster durch passende
Dateinamen ersetzen).
unhash
Verhindert, daß csh die interne Hash-Tabelle benutzt (siehe Kom-
mandoausführung).
unlimit [-h] [ressource]
Hebt den Grenzwert für die angegebene Ressource auf.
Seite 37 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
ressource
Siehe limit.
ressource nicht angegeben:
Der Grenzwert für alle Ressourcen wird aufgehoben.
-h Es werden die harten Grenzwerte aufgehoben. Dies darf nur
der Systemverwalter.
unset muster
Löscht alle Shell-Variablen, die zu muster passen. muster ist ein
Wort, das Sonderzeichen zur Dateinamen-Ersetzung enthalten kann
(siehe Muster durch passende Dateinamen ersetzen).
Das Kommando unset * löscht alle Shell-Variablen; dies hätte aber
unerwünschte Seiteneffekte.
unsetenv var
Löscht die Umgebungsvariable var aus der Umgebung. Für var können
Sie kein Muster wie bei unset angeben.
wait Wartet, bis alle Hintergrundaufträge beendet sind, und gibt dann
erst das Bereitzeichen aus. Ein Interrupt unterbricht das wait.
%[zk][&]
%zk holt den Auftrag, der durch %zk bestimmt ist, in den Vorder-
grund.
%zk& läßt den Auftrag, der durch %zk bestimmt ist, im Hintergrund
weiterlaufen.
zk kann sein: +, %, -, auftragsnummer, zeichenkette,
?zeichenkette (siehe Auftragssteuerung (Job Control)).
zk nicht angegeben:
Der aktuelle Auftrag wird in den Vordergrund geholt bzw. im Hin-
tergrund fortgesetzt.
Das Kommando %[zk] hat dieselbe Wirkung wie das Kommando fg
%[zk].
Das Kommando %[zk]& hat dieselbe Wirkung wie das Kommando bg
%[zk].
@ [var=ausdruck]
@ [var[n]=ausdruck]
Kein Argument angegeben:
@ gibt die Werte aller Shell-Variablen aus.
Seite 38 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
var=ausdruck
var[n]=ausdruck
@ var=ausdruck weist der Shell-Variablen var den Wert zu,
den ausdruck liefert (siehe Ausdrücke und Operatoren).
@ var[n]=ausdruck weist einer Shell-Variablen var, deren
Wert aus mehreren Worten besteht, den Wert von ausdruck als
n-te Wert-Komponente zu. Die Variable var und ihre n-te
Wert-Komponente müssen bereits existieren.
Die eckigen Klammern müssen Sie angeben (d. h. sie bezeich-
nen hier nicht ein optionales Syntaxelement).
Enthält ausdruck die Zeichen <, >, & oder |, dann müssen
diese Zeichen oder der ganze Ausdruck in runde Klammern
(...) eingeschlossen werden.
Wie in C können Sie die Operatoren *=, += usw. verwenden.
Zwischen dem Variablennamen und dem Zuweisungsoperator kön-
nen Sie ein Leerzeichen einfügen.
Außerdem können Sie die Postfix-Operatoren ++ und -- verwen-
den, um den Wert von var um 1 zu erhöhen bzw. zu erniedrigen.
Ablaufanweisungen
Ablaufanweisungen sind bei der C-Shell eingebaute Kommandos. Die C-
Shell kennt die folgenden Ablaufanweisungen:
break
foreach- oder while-Schleife abbrechen
breaksw
switch-Anweisung abbrechen
continue
foreach- oder while-Schleife mit dem nächsten Schleifendurchlauf
fortsetzen
foreach ... end
Liste in einer Schleife abarbeiten
goto an markierte Stelle springen
if Bedingung abfragen und Kommando ausführen
if ... then ... else if ... then ... else ... endif
Bedingungen abfragen und zugehörige Kommandos ausführen
switch ... case ... breaksw ... default ... breaksw ... endsw
abfragen und verzweigen
Seite 39 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
while ... end
Schleife mit Abbruchbedingung
break
break verwenden Sie innerhalb einer foreach- oder while-Schleife,
um die Schleife abzubrechen. csh setzt die Ausführung hinter dem
zugehörigen end fort. Stehen hinter break weitere Kommandos, so
werden diese ausgeführt. Damit können Sie geschachtelte Schleifen
nacheinander abbrechen, indem Sie die break-Kommandos hinterein-
ander in dieselbe Zeile schreiben.
breaksw
breaksw verwenden Sie innerhalb einer switch-Anweisung, um die
Abarbeitung der Anweisung abzubrechen. csh setzt die Ausführung
hinter dem zugehörigen endsw fort.
continue
continue verwenden Sie innerhalb einer foreach- oder while-
Schleife; csh bricht den aktuellen Schleifendurchlauf ab und
setzt die Ausführung mit dem nächsten Schleifendurchlauf fort.
foreach var (wortliste)
...
end Der Variablen var werden der Reihe nach die Worte in wortliste
als Wert zugewiesen. Nach jeder Zuweisung werden die Kommandos,
die zwischen foreach und end stehen, ausgeführt.
Die Anweisungen foreach var (wortliste) und end müssen jeweils
allein in einer eigenen Zeile stehen.
Zwischen der foreach- und der end-Zeile können die Kommandos
break und continue stehen (siehe oben).
Liest die Shell die foreach-Anweisung von einem Terminal (d. h.
nicht aus einer Shell-Prozedur), so gibt sie ein Fragezeichen
aus, bevor sie die Kommandos in der foreach-Schleife ausführt.
Auf das Fragezeichen hin können Sie Kommandos eingeben. Erst wenn
Sie end eingeben, führt die Shell die Kommandos in der foreach-
Schleife aus. Die Kommandos, die Sie auf das Fragezeichen hin
eingeben, werden nicht in die History-Liste gesetzt.
goto marke
Enthält marke Sonderzeichen zur Dateinamen-Ersetzung oder Zei-
chenketten in Gegenhochkommata `...`, so werden diese zuerst
ersetzt (siehe Muster durch passende Dateinamen ersetzen und Kom-
mandos durch ihre Ausgabe ersetzen). Anschließend geht die Shell
in ihrer Eingabe soweit wie möglich zurück und sucht nach einer
Zeile der Form
marke:
Seite 40 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
(vor marke: dürfen Leer- oder Tabulatorzeichen stehen). Die Shell
setzt die Ausführung nach dieser Zeile fort. Es ist ein Fehler,
wenn die Zeile marke: innerhalb einer while- oder foreach-
Schleife steht.
if (ausdruck) kommando
Hat ausdruck den Wert "wahr", wird kommando ausgeführt. kommando
ist ein einfaches Kommando, d. h. keine Kommandofolge, Pipeline
oder Kommandofolge in runden Klammern (...). Die Variablenerset-
zung in kommando findet gleichzeitig mit der Variablenersetzung
in ausdruck statt.
Enthält kommando Sonderzeichen zur Ein-/Ausgabe-Umlenkung, so
findet die Umlenkung auch dann statt, wenn ausdruck falsch ist.
if (ausdruck1) then
...
else if (ausdruck2) then
...
else
...
endif
Hat ausdruck1 den Wert "wahr", werden die Kommandos bis zum
ersten else ausgeführt. Anschließend wird die Abarbeitung nach
endif fortgesetzt.
Hat ausdruck1 den Wert "falsch", wird ausdruck2 ausgewertet.
Hat ausdruck2 den Wert "wahr", werden die Kommandos zwischen else
if und dem zweiten else ausgeführt. Anschließend wird die Abar-
beitung nach endif fortgesetzt.
Hat ausdruck2 den Wert "falsch", werden die Komandos zwischen dem
zweiten else und endif ausgeführt.
Es sind beliebig viele else if-Anweisungen erlaubt, aber nur eine
else-Anweisung. Die endif-Anweisung ist nur einmal erforderlich,
darf aber nicht fehlen.
Die Anweisung if (ausdruckX) muß entweder allein in einer eigenen
Zeile stehen (eventuell gefolgt von einem then) oder nach einem
else. Die Schlüsselwörter else und endif müssen als erstes Wort
in der Zeile stehen (d. h. davor dürfen nur Leer- und Tabulator-
zeichen stehen).
Seite 41 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
switch (zeichenkette)
case marke:
...
breaksw
...
default:
...
breaksw
endsw
Enthält zeichenkette Sonderzeichen zur Dateinamen-Ersetzung oder
Zeichenketten in Gegenhochkommata `...`, so werden diese zuerst
ersetzt (siehe Muster durch passende Dateinamen ersetzen und Kom-
mandos durch ihre Ausgabe ersetzen). Die case-Marken können die
Sonderzeichen *, ? und [...] zur Dateinamen-Ersetzung enthalten.
Variablen in den case-Marken werden ersetzt.
Anschließend wird zeichenkette der Reihe nach mit allen case-
Marken verglichen. Paßt zeichenkette zu einer case-Marke, führt
die Shell die Kommandos nach dieser Marke aus. Erreicht die Shell
eine default-Marke und hat bis dahin noch keine case-Marke
gepaßt, führt die Shell die Kommandos nach der default-Marke aus.
Paßt keine Marke und ist keine default-Marke vorhanden, setzt die
Shell die Abarbeitung nach endsw fort.
Das Kommando breaksw bricht die switch-Anweisung ab und setzt die
Abarbeitung nach endsw fort.
Paßt zeichenkette zu einer Marke und steht zwischen dieser Marke
und der nächsten Marke kein breaksw, so werden auch die Kommandos
der nächsten Marke ausgeführt usw. (genau wie in der Programmier-
sprache C).
Die Schlüsselwörter switch, case, default und endsw müssen
jeweils als erstes Wort in der Zeile stehen. Die default-Marke
sollte nach allen case-Marken stehen.
while (ausdruck)
...
end Solange ausdruck den Wert "wahr" hat, werden die Kommandos zwi-
schen der while-Anweisung und dem zugehörigen end ausgeführt.
Die Anweisungen while (ausdruck) und end müssen jeweils allein in
einer eigenen Zeile stehen.
Zwischen der while- und der end-Zeile können die Kommandos break
und continue stehen (siehe oben).
Liest die Shell die while-Anweisung von einem Terminal (d. h.
nicht aus einer Shell-Prozedur), so gibt sie ein Fragezeichen
aus, bevor sie die Kommandos in der while-Schleife ausführt. Auf
das Fragezeichen hin können Sie Kommandos eingeben. Erst wenn Sie
end eingeben, führt die Shell die Kommandos in der while-Schleife
Seite 42 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
aus. Die Kommandos, die Sie auf das Fragezeichen hin eingeben,
werden nicht in die History-Liste gesetzt.
Umgebungsvariablen und vordefinierte Shell-Variablen
Anders als die Standard-Shell sh unterscheidet die C-Shell zwischen
Umgebungsvariablen und Shell-Variablen: Umgebungsvariablen werden
automatisch an aufgerufene Prozesse exportiert, Shell-Variablen nicht.
Beide Arten von Variablen werden bei der Variablen-Ersetzung gleich
behandelt.
Bei der Initialisierung setzt die C-Shell die Shell-Variablen argv,
cwd, home, path, prompt, shell und status. Außerdem kopiert die C-
Shell die Umgebungsvariable USER in die Shell-Variable user, TERM in
term und HOME in home; werden diese Shell-Variablen neu gesetzt,
kopiert die C-Shell sie in die entsprechenden Umgebungsvariablen
zurück. Mit PATH und path verfährt die C-Shell genauso; Sie müssen
path nur einmal in der Datei .cshrc oder .login setzen. Die Umgebungs-
variable PWD erhält ihren Wert aus der Shell-Variablen cwd; ändert
sich der Wert von cwd, wird auch PWD neu gesetzt.
Mit dem Kommando set path eliminieren Sie aus dem Wert von path mehr-
fach vorhandene Pfadnamen. Dies kann entstehen, wenn in einer Shell-
Prozedur oder in der Datei .cshrc ein Kommando wie z. B. set
path=(/usr/local /usr/hosts $path) vorkommt, das sicherstellt, daß die
genannten Verzeichnisse in die Pfadnamen-Liste aufgenommen werden.
Die folgenden Shell-Variablen haben eine feste Bedeutung:
argv Argumentliste. Sie enthält die Liste der Kommandozeilen-Argu-
mente, die an die aktuelle Shell übergeben werden. Die Variable
argv legt die Werte der Stellungsparameter $1, $2 usw. fest:
$argv entspricht $1 usw.
cdpath
Enthält eine Liste von Verzeichnissen. Die Kommandos cd, chdir
und popd durchsuchen diese Verzeichnisse, wenn das Verzeichnis,
das diese Kommandos als Argument erhalten, kein Unterverzeichnis
des aktuellen Verzeichnisses ist.
cwd Enthält den vollen Pfadnamen des aktuellen Verzeichnisses.
echo Ist diese Variable gesetzt, schreibt csh jede Kommandoeingabe auf
die Standardausgabe, und zwar nach allen Ersetzungen, direkt vor
der Kommandoausführung. Siehe die csh-Optionen -x und -X.
fignore
Liste von Dateinamen-Suffixen, die bei der Vervollständigung von
Dateinamen ignoriert werden. Üblicherweise besteht diese Liste
aus dem Suffix .o. (Siehe Vervollständigung von Dateinamen und
Benutzerkennungen.)
Seite 43 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
filec
Wenn die Variable filec gesetzt ist, kann eine interaktive C-
Shell einen nur teilweise eingegebenen Dateinamen oder eine nur
teilweise eingegebene Benutzerkennung vervollständigen. In diesem
Fall haben die Zeichen ESC und EOF (<CTRL-D>) in einer Eingabe-
zeile, die vom Terminal eingegeben wird, eine Sonderbedeutung:
ESC Beginnt die vor ESC stehende Zeichenkette mit einer Tilde ~,
ergänzt die Shell diese Zeichenkette zu ~benutzerkennung,
wobei benutzerkennung eine existierende Benutzerkennung ist.
Kommen hierfür mehrere Kennungen in Frage, ertönt die Termi-
nalglocke.
Beginnt die vor ESC stehende Zeichenkette nicht mit einer
Tilde ~, ergänzt die Shell diese Zeichenkette zu einem
Dateinamen des aktuellen Verzeichnisses. Kommen hierfür meh-
rere Dateinamen in Frage, ertönt die Terminalglocke.
EOF Die Shell listet alle Benutzerkennungen bzw. Dateinamen des
aktuellen Verzeichnisses auf, die mit der vor EOF stehenden
Zeichenkette beginnen. Anschließend gibt die Shell die
unvollständige Kommandozeile erneut aus, damit Sie eine der
aufgelisteten Kennungen bzw. einen der aufgelisteten Datei-
namen eingeben können.
(Siehe Vervollständigung von Dateinamen und Benutzerkennungen.)
hardpaths
Ist diese Variable gesetzt, werden die Pfadnamen im Verzeichnis-
Stack so aufgelöst, daß sie keine symbolischen Verweise enthal-
ten. Diese Variable ist besonders nützlich, da die C-Shell Pro-
bleme mit symbolischen Verweisen haben kann.
histchars
Enthält eine Zeichenkette aus zwei Zeichen. Das erste Zeichen ist
das Zeichen, mit dem ein History-Befehl beginnt (normalerweise
das Ausrufezeichen). Das zweite Zeichen ist das Sonderzeichen,
das für den History-Befehl ^l^r[^] verwendet wird (normalerweise
das Dach ^, siehe History-Ersetzung, Kurzschreibweise).
history
Anzahl der Zeilen, die in der History-Liste gespeichert werden.
Diese Zahl darf beliebig groß sein; sie wird nur durch den Spei-
cherplatz begrenzt, den die C-Shell zur Verfügung stellen kann.
Ist die Variable nicht gesetzt, wird nur das zuletzt eingegebene
Kommando gespeichert.
home Enthält das HOME-Verzeichnis.
Seite 44 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
Ist in einer Kommando-Eingabezeile ein HOME-Verzeichnis mit Hilfe
einer Tilde ~ angegeben, fragt die Shell die Variable home ab, um
das richtige Verzeichnis zu ermitteln (siehe Muster durch pas-
sende Dateinamen ersetzen).
ignoreeof
Ist diese Variable gesetzt, ignoriert die Shell EOF-Zeichen, die
vom Terminal eingegeben werden. Damit können Sie verhindern, daß
die Shell durch irrtümliche Eingabe von <CTRL-D> beendet wird.
mail Liste der Dateien, die die C-Shell bzgl. des Empfangs von mail-
Nachrichten überprüft. Ist das erste Wort des Wertes von mail
eine Zahl n, überprüft die Shell die in der Liste angegebenen
Dateien alle n Sekunden. Ist keine Zahl angegeben, überprüft die
Shell die mail-Dateien alle 5 Minuten.
nobeep
Ist diese Variable gesetzt, so läutet die Terminalglocke nicht,
wenn zu einer unvollständigen Eingabe mehrere Datei- bzw. Benut-
zernamen passen (siehe Vervollständigung von Dateinamen und
Benutzerkennungen).
noclobber
Ist diese Variable gesetzt, ist nur eine eingeschränkte Ausgabe-
Umlenkung möglich: Mit > kann die Ausgabe nur in neue, noch nicht
existierende Dateien umgelenkt werden; mit >> kann die Ausgabe
nur in bereits existierende Dateien umgelenkt werden. Siehe
Umlenkung der Ein-/Ausgabe.
noglob
Verhindert die Ersetzung von Mustern durch passende Dateinamen.
Dies ist in Shell-Prozeduren nützlich, wenn die gewünschten
Dateinamen bereits zu Verfügung stehen und keine weiteren Erset-
zungen stattfinden sollen.
nonomatch
Paßt zu einem Dateinamen-Muster kein Dateiname, interpretiert die
Shell dies nicht als Fehler, sondern gibt das eingegebene Muster
aus. Muster mit falscher Syntax bewirken weiterhin einen Fehler.
notify
Ist diese Variable gesetzt, teilt Ihnen die Shell Status-Änderun-
gen von Aufträgen sofort mit, nicht erst unmittelbar vor Ausgabe
des Bereitzeichens (siehe Auftragssteuerung).
path Liste der Verzeichnisse, die bei der Ausführung eines Kommandos
nach der zugehörigen Datei durchsucht werden (siehe Kommandoaus-
führung). Ist der Wert von path die leere Zeichenkette, wird nur
das aktuelle Verzeichnis durchsucht. Üblicherweise hat path den
Wert: (. /usr/ucb /usr/bin).
Seite 45 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
Ist path nicht gesetzt, führt die Shell nur Kommandos mit absolu-
tem Pfadnamen aus.
path wird mit dem Wert der Umgebungsvariablen PATH initialisiert;
ändert path seinen Wert, so kopiert die Shell diesen Wert in die
Umgebungsvariable PATH zurück.
Eine interaktive C-Shell setzt die in path enthaltenen Verzeich-
nisse normalerweise in folgenden Fällen in die Hash-Tabelle:
- nachdem sie die Datei .cshrc gelesen hat
- nachdem die Variable path neu gesetzt worden ist
- wenn Sie das eingebaute C-Shell-Kommando rehash aufrufen.
Das Kommando rehash sollten Sie immer dann aufrufen, wenn sich
der Inhalt der Verzeichnisse, die in path eingetragen sind, geän-
dert hat (z. B. wenn ein neues Kommando hinzugekommen ist). Siehe
Kommandoausführung.
prompt
Bereitzeichenkette, mit der eine interaktive C-Shell zur Eingabe
auffordert.
Ein Ausrufezeichen ! im Wert von prompt wird bei der Ausgabe der
Bereitzeichenkette durch die aktuelle Ereignisnummer ersetzt
(siehe History-Ersetzung). Beachten Sie, daß Sie beim entspre-
chenden set-Aufruf das Ausrufezeichen mit einem vorangestellten
Gegenschrägstrich \ entwerten müssen, damit die Shell keine
History-Ersetzung durchführt (siehe BEISPIELE, History-Erset-
zung).
Als Standard-Bereitzeichenkette gibt eine interaktive Shell
rechnername% (für normale Benutzer) bzw. rechnername# (für den
Systemverwalter) aus.
Nicht-interaktive C-Shells setzen die Variable prompt nicht. Wol-
len Sie Alias-Namen und andere Kommandos, die nur interaktiv
sinnvoll sind, in die Datei .cshrc schreiben, können Sie vorher
die folgende if-Anweisung einfügen, um die Start-Zeit für nicht-
interaktive C-Shells zu verkürzen:
if ($?prompt == 0) exit
(Ist die Variable prompt nicht gesetzt, d. h. ist die Shell
nicht-interaktiv, wird exit ausgeführt.)
savehist
Anzahl der Zeilen der History-Liste, die in der Datei ~/.history
gespeichert werden, wenn Sie sich ausloggen.
Seite 46 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
Große Werte von savehist verlängern die Start-Zeit der C-Shell.
shell
Datei, die das C-Shell-Programm enthält.
Diese Variable wird benutzt, wenn mit fork(2) eine Shell erzeugt
werden soll, um eine Datei zu interpretieren, die Ausführrecht
(x-Bits) besitzt, aber die das System nicht ausführen kann. Siehe
Kommandoausführung.
status
Endestatus des zuletzt ausgeführten Kommandos. Wurde das Kommando
nicht ordnungsgemäß beendet, wird zum Wert von status 0200
addiert. Eingebaute Kommandos liefern den Endestatus 1 bei Mißer-
folg und 0 sonst.
time Ist diese Variable gesetzt, gibt die Shell nach Beendigung jedes
Kommandos eine Übersicht über die Ressourcen aus, die das Kom-
mando verbraucht hat.
Der Wert von time kann leer sein oder aus einer oder zwei Kompo-
nenten bestehen.
- Ist der Wert leer, hat die Übersicht die Form
%U %S %E %P %X %D %I %O %F %W (siehe unten).
- Für die erste Wert-Komponente können Sie eine Zahl n angeben;
die Shell gibt dann die Übersicht nur für solche Kommandos
aus, die mindestens n Sekunden CPU-Zeit verbraucht haben.
- Die zweite Wert-Komponente ist eine Zeichenkette, die das Aus-
gabeformat der Übersicht festlegt [siehe die Formatzeichen-
kette bei printf(3S)]. Die Zeichenkette kann sowohl normale
Zeichen als auch Feldbezeichner enthalten. Normale Zeichen
werden unverändert ausgegeben. Feldbezeichner sind von der
Form %buchstabe. Sie werden bei der Ausgabe durch ihren Wert
ersetzt. Folgende Feldbezeichner können Sie angeben:
%D Getrennt benutzter Datenbereich (unshared data space) in
Kilobyte, der durchschnittlich belegt wurde
%E Zeit, die während der Ausführung vergangen ist (real
time)
%F Seitenfehler
%I Anzahl der Blockleseoperationen von der Platte
%K Getrennt benutzter Stackbereich (unshared stack space) in
Kilobyte, der durchschnittlich belegt wurde
Seite 47 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
%M Gesamtgröße des physischen Speichers (real memory), der
während der Ausführung des Prozesses belegt wurde
%O Anzahl der Blockschreibeoperationen von der Platte
%P Gesamte verbrauchte CPU-Zeit (%U plus %S) in Prozent der
%E-Zeit
%S CPU-Zeit in Sekunden, die der Systemkern für den Benut-
zerprozeß verbraucht hat (Zeit, die im Systemmodus ver-
bracht wurde)
%U CPU-Zeit in Sekunden, die der Benutzerprozeß selbst ver-
braucht hat (Zeit, die im Benutzermodus verbracht wurde)
%W Anzahl der Auslager-Operationen (swaps)
%X Gemeinsam genutzter Speicher (shared memory) in Kilobyte,
der durchschnittlich belegt wurde
verbose
Ist diese Variable gesetzt, gibt die Shell jedes eingegebene Kom-
mando aus, nachdem die History-Ersetzung stattgefunden hat. Siehe
die csh-Optionen -v und -V.
C-Shell-Prozeduren
Wie die Bourne-Shell sh bietet auch die C-Shell csh die wesentlichen
Elemente einer Programmiersprache. Ein solches Programm heißt C-
Shell-Prozedur.
Eine C-Shell-Prozedur besteht aus einer oder mehreren Kommandozeilen.
Insbesondere stehen Ihnen eine Reihe von eingebauten Kommandos zur
Verfügung, mit denen Sie den Ablauf von Kommandos in der Shell-
Prozedur steuern können. Diese Kommandos veranlassen die Shell entwe-
der, Schleifen auszuführen, oder unter bestimmten Bedingungen einen
Teil der Eingabe zu überspringen (siehe Eingebaute C-Shell-Kommandos,
Ablaufanweisungen).
Üblicherweise schreiben Sie die Shell-Prozedur in eine Datei. Die
Datei muß Lese- und Ausführrecht besitzen. Shell-Prozeduren müssen
nicht übersetzt werden. Sie starten eine C-Shell-Prozedur normaler-
weise mit dem Kommando csh datei. Daraufhin erzeugt die Shell eine
Subshell, die jede Zeile in datei liest, interpretiert und ausführt.
Sind alle Kommandozeilen ausgeführt, beendet sich die Subshell, und
die übergeordnete Shell meldet sich zurück.
C-Shell-Prozeduren können Sie auch mit dem eingebauten C-Shell-
Kommando source starten; im letzteren Fall wird die Prozedur in der
aktuellen Shell ausgeführt, es wird also keine Subshell erzeugt.
Seite 48 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
Das Nummernzeichen # leitet einen Kommentar ein; der Kommentar endet
mit der Eingabezeile. Bei der Abarbeitung der Prozedur ignoriert die
Shell alle Zeichen, die zum Kommentar gehören.
Beginnt die erste Zeile einer Shell-Prozedur mit #!, wird das darauf-
folgende Wort als Pfadname einer Shell (oder eines anderen Kommandos)
interpretiert, die die Shell-Prozedur ausführen soll. Weitere Worte,
die in der ersten Zeile stehen, gelten als Optionen für diese Shell.
Der Kern ruft die angegebene Shell auf (überlagert sie) und gibt ihr
den Namen der Shell-Prozedur als Argument mit.
Beginnt die erste Zeile der Prozedur nicht mit #!, erzeugt csh eine
neue Shell, und zwar
- eine C-Shell csh, falls die erste Zeile der Prozedur mit einem Num-
mernzeichen # beginnt
- eine Bourne-Shell sh andernfalls;
diese neu erzeugte Shell führt dann die Prozedur aus.
GRENZWERTE
Für die C-Shell gelten die folgenden Beschränkungen:
- Worte können höchstens 1024 Zeichen lang sein.
- Argumentlisten dürfen höchstens 1 048 576 Zeichen lang sein.
- Kommandos, bei denen Muster durch passende Dateinamen ersetzt wer-
den sollen, dürfen höchstens 1706 Argumente haben.
- Werden Kommandos in Gegenhochkommata `...` durch ihre Ausgabe
ersetzt, darf die entstehende Argumentliste höchstens 1 048 576
Zeichen lang sein (siehe oben).
- Die Shell führt pro Zeile höchstens 20 Alias-Ersetzungen durch, um
etwaige Schleifen entdecken zu können.
FEHLERMELDUNGEN
You have stopped jobs.
Sie wollten die C-Shell beenden, hatten jedoch gestoppte Aufträge
unter Auftragskontrolle. Ein erneuter Versuch, die Shell zu beenden,
wird erfolgreich sein, die gestoppten Aufträge werden beendet.
DATEIEN
~/.cshrc
Datei, die die C-Shell beim Start ausführt.
~/.login
Datei, die eine Login-C-Shell beim Start nach der Datei .cshrc
ausführt.
Seite 49 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
~/.logout
Datei, die eine Login-C-Shell beim Logout ausführt.
~/.history
Datei, in der beim Logout die History-Liste gespeichert wird, so
daß die Liste beim nächsten Login wieder zur Verfügung steht.
/usr/bin/sh
Standard-Shell. sh ist eine Bourne-Shell. Shell-Prozeduren, die
nicht mit einem Nummernzeichen # beginnen, werden von sh ausge-
führt.
/tmp/sh*
Temporärdatei für << (siehe Umlenkung der Ein-/Ausgabe).
/etc/passwd
Kennwortdatei. Sie enthält u. a. die HOME-Verzeichnisse, die die
C-Shell bei der Auswertung des Musters ~benutzerkennung benötigt
(siehe Muster durch passende Dateinamen ersetzen).
BEISPIELE
Der Kürze halber wird in den Beispielen, wo nichts anderes erwähnt
ist, das Bereitzeichen % (statt des Standard-Bereitzeichens
rechnername% ) verwendet.
Vervollständigung von Dateinamen und Benutzerkennungen
Für Beispiel 1 und 2 wird vorausgesetzt, daß die Variable filec
gesetzt ist.
Beispiel 1
Dateinamen
Das aktuelle Verzeichnis enthalte die Dateien chaosnet, class, cmd,
liste.alt und liste.neu.
Wenn Sie eingeben:
% vi ch <ESCAPE>
dann vervollständigt die Shell diese Eingabezeile zu
vi chaosnet
Geben Sie dagegen ein:
% vi l <ESCAPE>
dann läutet die Shell die Terminalglocke, da mehrere Dateinamen passen
(liste.alt und liste.neu).
Seite 50 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
Wenn Sie statt des Zeichens <ESCAPE> das EOF-Zeichen eingeben, listet
die Shell alle passenden Dateinamen auf:
% vi l <CTRL-D>
liste.alt liste.neu
% vi l
Beispiel 2
Benutzerkennungen
Die Eingabezeile
% cd ~ro <ESCAPE>
wird vervollständigt zu
cd ~root
falls ro eine eindeutige Abkürzung ist. Damit wechseln Sie in das
HOME-Verzeichnis von root.
History-Ersetzung
Für die Beispiele dieses Abschnitts wird vorausgesetzt, daß das
Bereitzeichen für die C-Shell folgendermaßen definiert ist:
set prompt="\!%"
Die C-Shell gibt dann als Bereitzeichen die aktuelle Ereignisnummer,
gefolgt von Prozent- und Leerzeichen aus (siehe die Shell-Variable
prompt). Außerdem muß die Variable history auf einen genügend großen
Wert (z. B. 10) gesetzt sein.
Beispiel 3
Ereignis-Bezeichner
Mit der nachstehenden Kommandofolge erzeugen Sie zuerst mit dem Editor
vi die C-Quelldatei prog.c und übersetzen sie anschließend mit dem C-
Compiler cc. Da Sie im Programm einen Schreibfehler gemacht haben, mel-
det cc einen Syntaxfehler. Sie editieren daraufhin die Datei erneut,
korrigieren den Fehler und übersetzen das Programm wieder mit cc.
1% vi prog.c
...
2% cc -O prog.c -o form
...
3% vi prog.c
...
4% cc -O prog.c -o form
5%
Seite 51 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
Mit Hilfe der History-Ersetzung können Sie sich die zweimalige Eingabe
desselben Kommandos ersparen:
1% vi prog.c
...
2% cc -O prog.c -o form
...
3% !v oder 3% !vi
vi prog.c
...
4% !c oder 4% !cc oder 4% !?form
cc -O prog.c -o form
5%
Im Ereignis 3 wurde der History-Befehl !v bzw. !vi eingegeben. Dabei
ist v bzw. vi der Ereignis-Bezeichner; er bezeichnet das zuletzt ein-
gegebene Kommando, das mit v (vi) beginnt - das ist das Kommando vi
prog.c. Die C-Shell schreibt die bezeichnete Kommandozeile auf den
Bildschirm und führt sie anschließend aus.
Entsprechend wird durch den History-Befehl !c bzw. !cc (Ereignis 4)
das Kommando cc -O prog.c -o prog ausgeführt. Dasselbe leistet hier
der History-Befehl !?form: Er bezeichnet das zuletzt eingegebene Kom-
mando, das (an beliebiger Stelle) die Zeichenkette form enthält.
Statt mit Zeichenketten können Sie die Kommandos auch mit Ereignisnum-
mern ansprechen. Wissen Sie nicht, welche Nummer dem gewünschten Kom-
mando in der History-Liste zugeordnet ist, können Sie sich die Liste
mit dem eingebauten C-Shell-Kommando history ausgeben lassen. Die
Ereignisnummern können Sie entweder absolut oder relativ zum aktuellen
Ereignis angeben:
1% vi prog.c
...
2% cc -O prog.c -o form
...
3% history
1 vi prog.c
2 cc -O prog.c -o form
3 history
4% !1 oder 4% !-3
vi prog.c
...
5% !2 oder 5% !-3
cc -O prog.c -o form
6%
Seite 52 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
Beispiel 4
Wort-Bezeichner
_____________________________________________________________________
| Zuletzt eingegebenes | Eingabezeile mit| Eingabezeile nach der |
| Kommando | History-Befehlen| History-Ersetzung |
|_______________________|__________________|_________________________|
| grep ^anna /etc/passwd| grep !* | grep ^anna /etc/passwd |
| | _________________|_________________________|
| | grep !:1 datei | grep ^anna datei |
| | grep !^ datei | |
| | _________________|_________________________|
| | grep ^berta !:2 | grep ^berta /etc/passwd|
| | grep ^berta !$ | |
|_______________________|__________________|_________________________|
Beispiel 5
Parameter
_______________________________________________________________________
| Zuletzt eingegebenes | Eingabezeile mit | Eingabezeile nach der|
| Kommando | History-Befehlen | History-Ersetzung |
|______________________|_______________________|_______________________|
| ls -l /home/anna/plan| ls -ld !$:h | ls -ld /home/anna |
| | ls -ld !$:t | ls -ld plan |
|______________________|_______________________|_______________________|
| vi prog.c | cc !$ -o !$:r | cc prog.c -o prog |
| | cc !$ -o !$:s/.c/ | |
|______________________|_______________________|_______________________|
| cc prog.c -o prog | !:gs/prog/liste | cc liste.c -o liste |
| | !:s/prog/liste | cc liste.c -o prog |
|______________________|_______________________|_______________________|
| cat d1 d2 d3 | cat !:1:s/d/dat/!:3:&| cat dat1 dat3 |
|______________________|_______________________|_______________________|
Bei komplizierten History-Befehlen sollten Sie zuerst mit dem Parame-
ter p prüfen, ob die History-Ersetzung die gewünschte Kommandozeile
liefert, und erst dann das Kommando ausführen. Das würde im obigen
Beispiel so aussehen:
1% cat d1 d2 d3
...
2% cat !:1:s/d/dat/ !:3:&:p
cat dat1 dat3
3% !!
cat dat1 dat3
...
4%
Seite 53 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
Beispiel 6
Klammern
___________________________________________________________________
| Zuletzt eingegebenes| Eingabezeile mit | Eingabezeile nach der|
| Kommando | History-Befehlen | History-Ersetzung |
|_____________________|_____________________|______________________|
| ls -ld ~paul | !ls | das letzte Kommando, |
| | | das mit la beginnt |
| | ____________________|______________________|
| | !{l}a | ls -ld ~paula |
| | !!a | |
| | !{!}a | |
|_____________________|_____________________|______________________|
Beispiel 7
Kurzschreibweise
______________________________________________________________________
| Zuletzt eingegebenes | Eingabezeile mit| Eingabezeile nach der |
| Kommando | History-Befehlen| History-Ersetzung |
|________________________|__________________|_________________________|
| grep ^berta /etc/passwd| ^tr^rt | grep ^berta /etc/passwd|
| | !:s^tr^rt | |
| | !:s/tr/rt | |
|________________________|__________________|_________________________|
Alias-Namen
Beispiel 8
Einfaches Beispiel
% alias lld ls -ld
% alias
...
lld (ls -ld)
...
Wenn Sie eingeben:
% lld /usr
dann liest die Shell die zum Alias-Namen lld gehörige Alias-Definition
ls -ld und fügt das Argument /usr an. Damit ergibt sich das Kommando
ls -ld /usr
Mit dem Kommando
% unalias lld
Seite 54 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
löschen Sie den Alias-Eintrag lld ls -ld aus der Alias-Liste. Mit
% unalias *
löschen Sie die gesamte Alias-Liste.
Beispiel 9
History-Befehle in Alias-Definitionen
% alias gpw grep \!^ /etc/passwd
Wegen des Gegenschrägstrichs wertet die Shell den History-Befehl bei
der Ausführung des alias-Kommandos noch nicht aus:
% alias
gpw (grep !^ /etc/passwd)
Wenn Sie nun eingeben:
% gpw anna
dann liest die Shell die zum Alias-Namen gpw gehörige Alias-Definition
grep !^ /etc/passwd und ersetzt den History-Befehl !^. Bei dieser
History-Ersetzung interpretiert die Shell das Kommando gpw anna als
letztes Ereignis, d. h. so, als ob Sie nacheinander die Kommandos
gpw anna
grep !^ /etc/passwd
eingegeben hätten; der History-Befehl !^ bezeichnet also das Argument
anna, und das entstehende Kommando lautet:
grep anna /etc/passwd
Hierzu noch zwei komplexere Beispiele:
% alias vcc 'vi \!^; cc \!^ -o \!^:r'
% alias
vcc vi !^; cc !^ -o !^:r
Der Aufruf
% vcc prog.c
ergibt die Kommandofolge
vi prog.c; cc prog.c -o prog
Beim alias-Aufruf müssen Sie die Alias-Definition in Hochkommata '...'
einschließen, da die Shell sonst den Strichpunkt als Abschluß des Kom-
mandos alias interpretiert statt als Bestandteil der Alias-Definition.
Seite 55 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
% alias lm 'ls -l \!* | more'
Der Aufruf
% lm dir1 dir2
ergibt die Pipeline
ls -l dir1 dir2 | more
Beispiel 10
Geschachtelte Alias-Definition
% alias clm 'cd \!^; lm'
% alias lm 'ls -l | more'
Der Aufruf
% clm dir
ergibt die Kommandofolge
cd dir; ls -l | more
Beispiel 11
Alias-Definition, die den zugehörigen Alias-Namen enthält
% alias ls ls -l
Der Aufruf
% ls dir
ergibt das Kommando
ls -l dir
Variablen-Ersetzung
Beispiel 12
Das folgende Beispiel zeigt, daß C-Shell-Variablen als Felder (arrays)
wie in C betrachtet werden können. Sie können sie mit einer Wortliste
initialisieren, die einzelnen Elemente mit Index ansprechen und ihnen
Werte zuweisen.
% set farbe=(rot gelb gruen)
% echo $farbe
rot gelb gruen
% echo $#farbe
Seite 56 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
3
% echo $farbe[3] $farbe[1] $farbe[2-3]
gruen rot gelb gruen
% set farbe[2]=blau
% echo $farbe
rot blau gruen
Zunächst wird der Shell-Variablen farbe die Wortliste rot gelb gruen
als Wert zugewiesen. Das zweite Kommando gibt den Wert von farbe aus.
echo $#farbe liefert die Anzahl der Worte, aus denen der Wert von
farbe besteht. Die drei letzten Kommandos zeigen, wie Sie einzelne
Wert-Komponenten ansprechen und verändern können.
Muster durch passende Dateinamen ersetzen
Beispiel 13
Das aktuelle Verzeichnis enthalte die Dateien liste, plan, plan1,
plan2, plan3, planung. Das Unterverzeichnis prog enthalte die Dateien
ls.c, newls.c, oldls.c und pgm.c.
______________________________________________________________
| Muster | wird ersetzt durch |
|_______________________|_____________________________________|
| plan* | plan plan1 plan2 plan3 planung |
|_______________________|_____________________________________|
| plan? | plan1 plan2 plan3 |
|_______________________|_____________________________________|
| plan[12] | plan1 plan2 |
|_______________________|_____________________________________|
| plan[1-3] | plan1 plan2 plan3 |
|_______________________|_____________________________________|
| prog/*ls* | prog/ls.c prog/newls.c prog/oldls.c |
|_______________________|_____________________________________|
| prog/{oldls,ls,main}.c| prog/oldls.c prog/ls.c prog/main.c |
|_______________________|_____________________________________|
| ./{plan?,liste} | ./plan1 ./plan2 ./plan3 ./liste |
|_______________________|_____________________________________|
Beachten Sie in obiger Tabelle die Reihenfolge: Bei der Auswertung der
geschweiften Klammern {...} werden die Zeichenketten nicht sortiert;
bei der Auswertung der anderen Sonderzeichen werden die passenden
Dateinamen alphabetisch sortiert.
Die vorletzte Zeile der Tabelle macht zudem deutlich, daß die Shell
die geschweiften Klammern direkt auswertet, ohne die entstehenden Zei-
chenketten mit den Namen der existierenden Dateien zu vergleichen; so
enthält die Liste, durch die das Muster ersetzt wird, auch den Pfadna-
men prog/main.c, obwohl eine solche Datei gar nicht existiert.
Wenn Ihr HOME-Verzeichnis /home/anna ist und das HOME-Verzeichnis des
Benutzers Kurt /home/kurt, dann werden die Muster ~ bzw. ~kurt folgen-
dermaßen ausgewertet:
Seite 57 Reliant UNIX 5.44 Gedruckt 11/98
csh(1) csh(1)
_________________________________________________________________
| Muster | wird ersetzt durch |
|____________________|___________________________________________|
| ~/version5/prog | /home/anna/version5/prog |
|____________________|___________________________________________|
| ~kurt/prog | /home/kurt/prog |
|____________________|___________________________________________|
| ~kurt/prog/*.c | /home/kurt/prog/cls.c /home/kurt/prog/ls.c|
|____________________|___________________________________________|
SIEHE AUCH
login(1), sh(1), access(2), exec(2), fork(2), pipe(2), a.out(4),
terminfo(4), ascii(5), environ(5).
Seite 58 Reliant UNIX 5.44 Gedruckt 11/98