ksh(1) ksh(1)
NAME
ksh, rksh, alias, bg, break, continue, fc, fg, jobs, let, print,
return, typeset, unalias, whence - Kommandointerpreter und Program-
miersprache Korn-Shell
SYNTAX
ksh [option ...] [datei] [argument ...]
BESCHREIBUNG
Die Kommandobeschreibung ist in folgende Abschnitte unterteilt:
⊕ Wesentliche Erweiterungen der Korn-Shell gegenüber der Bourne-Shell
⊕ Aufrufoptionen
⊕ Bereitzeichenausgabe
⊕ Definitionen
⊕ Kommandos
⊕ Reservierte Wörter
⊕ Zusammengesetzte Anweisungen
⊕ Kommentare
⊕ Alias-Variablen
⊕ Tilde-Ersetzung
⊕ Kommandoersetzung
⊕ Korn-Shell-Variablen und Parameterersetzung
⊕ Blank-Ersetzung
⊕ Dateinamen-Erzeugung
⊕ Entwertung von Metazeichen (quoting)
⊕ Arithmetische Berechnungen
⊕ Bedingte Ausdrücke
⊕ Eigenschaften von Dateien
⊕ Eigenschaften und Vergleiche von Zeichenketten
⊕ Algebraischer Vergleich ganzer Zahlen
⊕ Bedingungen verknüpfen oder negieren
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
⊕ Ein-/Ausgabeumlenkung
⊕ Umgebung
⊕ Funktionen
⊕ Aufträge
⊕ Signale
⊕ Ausführung
⊕ Kommando-Wiederaufruf
⊕ Optionen des Zeileneditors
⊕ emacs-Editiermodus
⊕ vi-Editiermodus
⊕ Eingabeanweisungen
⊕ Positionieranweisungen
⊕ Suchanweisungen
⊕ Anweisungen zur Textmodifikation
⊕ Sonstige Editieranweisungen
⊕ Eingebaute Kommandos
Die Korn-Shell ist ein programmierbarer Kommandointerpreter, der seine
Kommandos von einem Terminal oder aus einer Datei liest, interpretiert
und für deren Ausführung sorgt.
rksh ist eine eingeschränkte Version des Kommandointerpreters ksh; sie
dient zum Einrichten von Login-Namen und Ausführungsumgebungen, deren
Leistungsmöglichkeiten enger gesteckt sind als die der standardmäßigen
Shell. Die an die Shell übergebenen Argumente sind unten unter OPTIO-
NEN erklärt.
Ähnlich wie die Standard-Shell [sh(1)] oder die C-Shell [csh(1)] ist
die Korn-Shell eine Benutzerschnittstelle zum Betriebsystem-Kern. Die
Korn-Shell ist von Syntax und Semantik weitgehend kompatibel zur
Bourne-Shell und stellt eine Erweiterung dieser dar. Bourne-Shell-Pro-
zeduren sind auch unter der Korn-Shell ablauffähig.
Die C-Shell hat einen ähnlich mächtigen Funktionsumfang wie die Korn-
Shell, besitzt aber eine an die Programmiersprache C angepaßte Syntax.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
Für den geübten Bourne-Shell-Anwender sind unten die wesentlichen
Erweiterungen von Bourne- zu Korn-Shell dargestellt. Der ungeübte
Benutzer findet in den Manualseiten der Bourne-Shell [siehe sh(1)] und
den Seiten für die eingebauten Bourne-Shell-Kommandos ausführlichere
Erklärungen.
Wesentliche Erweiterungen der Korn-Shell gegenüber der Bourne-Shell
- Bidirektionale Pipelines (|&) zwischen Kommandos.
- Die select-Anweisung ermöglicht die interaktive Auswahl aus einer
Wortliste.
- time als Anweisung.
- Alias-Funktion für Kommandonamen.
- Tilde-Ersetzung für Dateinamen.
- Geänderte Syntax der Kommandoersetzung ergänzt durch arithmetische
Ausdrücke.
- Parameter können über das eingebaute ksh-Kommando typeset Attribute
wie Format oder Datentyp erhalten.
- Eindimensionale Felder werden unterstützt.
- Die automatisch gesetzten und die von der Korn-Shell verwendeten
Variablen wurden ergänzt.
- Die Ersetzung von Dateinamen ist um Musterlisten erweitert. Bei der
Umlenkung von Ein- und Ausgabe können Muster zur Erzeugung eines
einzelnen Dateinamens eingesetzt werden.
- Das let-Kommando wurde für Integer-Arithmetik eingebaut.
- Bedingte Ausdrücke mit einem ähnlichen Umfang wie das test-Kommando
wurden als Anweisung eingebaut.
- Funktionen können nun lokale Variable haben, sind "exportierbar"
und über einen Suchpfad auffindbar.
- Auftragssteuerung (job control), ist über die monitor-Option des
eingebauten Kommandos set einsetzbar, mit einfachem Zugriff auf
Prozesse - ähnlich dem der Shell jsh(1) (Bourne-Shell mit Auftrags-
steuerung).
- Bei der Bearbeitung der Kommandozeile wird zuerst nach eingebauten
Kommandos und dann nach Funktionen gesucht.
- Stellungsparameter werden vor Funktionsaufrufen gesichert und
danach wiederhergestellt.
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
- Kommandowiederaufruf: Die abgesetzten Kommandos einer interaktiven
Korn-Shell werden in einer History-Datei gespeichert. Auf diese
kann dann über das eingebaute Kommando fc zugegriffen werden. Dabei
ist einfacher Textersatz vor der Ausführung möglich. Durch eine
Option ist das Editieren (emacs- oder vi-Modus) einzelner Kommando-
zeilen aus der History-Datei vor deren Ausführung möglich.
- Beim Aufruf durch login kann nach der Datei $HOME/.profile noch die
Datei, deren Name durch den Wert der Shell-Variable ENV, geben ist,
aufgerufen werden.
- Die eingebauten Kommandos wurden zum Teil in ihrer Funktion erwei-
tert, durch neue ergänzt, oder entfernt:
Erweiterte Kommandos
__________________________________________________________
| Kommando | Erweiterung |
|_____________|___________________________________________|
| . | Argumente |
|_____________|___________________________________________|
| : | Argumente |
|_____________|___________________________________________|
| cd | Ersetzung |
|_____________|___________________________________________|
| export | Wertzuweisung |
|_____________|___________________________________________|
| getopts | Shell-Variable |
|_____________|___________________________________________|
| read | Bidirektionale Pipeline |
|_____________|___________________________________________|
| readonly | Wertzuweisung |
|_____________|___________________________________________|
| set | u. a. Feld-Wertzuweisung |
|_____________|___________________________________________|
| shift | Arithmetischer Ausdruck |
|_____________|___________________________________________|
| trap | Spezielle Signale |
|_____________|___________________________________________|
| umask | Symbolische Angaben wie chmod |
|_____________|___________________________________________|
| unset | Keine readonly-Variablen |
|_____________|___________________________________________|
| wait | Auftragssteuerung |
|_____________|___________________________________________|
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
Neue Kommandos
__________________________________________________________
| Kommando | Funktion |
|_____________|___________________________________________|
| alias | Kommandonamen |
|_____________|___________________________________________|
| bg | Auftragssteuerung |
|_____________|___________________________________________|
| fc | Zugriff auf die History-Datei |
|_____________|___________________________________________|
| fg | Auftragssteuerung |
|_____________|___________________________________________|
| jobs | Auftragssteuerung |
|_____________|___________________________________________|
| kill | Auftragssteuerung |
|_____________|___________________________________________|
| let | Integer-Arithmetik |
|_____________|___________________________________________|
| print | Ausgabemechanismus ähnlich echo |
|_____________|___________________________________________|
| typeset | Attribute für Shell-Variable |
|_____________|___________________________________________|
| unalias | Alias-Variable löschen |
|_____________|___________________________________________|
| whence | Kommando-Lokalisation |
|_____________|___________________________________________|
OPTIONEN
Kommandos werden nacheinander aus der Datei /etc/profile und dann,
falls eine der Dateien existiert, entweder aus .profile des aktuellen
Verzeichnisses oder aus $HOME/.profile gelesen. Danach werden noch die
Kommandos aus der Datei gelesen, deren Name durch den Wert der Shell-
Variable ENV nach Parametersubstitution gegeben wird.
Die folgenden Optionen werden von ksh beim Aufruf interpretiert:
-c kommandozeichenkette
Die Kommandos werden aus kommandozeichenkette gelesen.
-s Ist Option -s angegeben oder fehlen datei und argument, dann
liest die Korn-Shell die Kommandos von der Standardeingabe und
schreibt die Ausgaben auf die Standardfehlerausgabe, während die
eingebauten ksh-Kommandos auf die Standardausgabe schreiben.
-i Ist Option -i angegeben oder sind Standardeingabe und -ausgabe
mit einem Terminal verbunden, dann wird eine interaktive Korn-
Shell aufgerufen. In diesem Fall wird zum einen TERM ignoriert,
so daß kill 0 keine interaktive Shell beendet, und zum anderen
INTR abgefangen und ignoriert, damit wait unterbrechbar ist. Auf
jeden Fall wird QUIT von der Korn-Shell ignoriert.
-r Mit Option -r wird eine eingeschränkte Korn-Shell gestartet.
Seite 5 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
Die restlichen Optionen sind unten beim eingebauten Kommando set
beschrieben.
-- Ende der Optionenliste. Die Angabe ist nötig, wenn datei mit -
beginnt.
Hinweis: In früheren Versionen der Shell hatte die Angabe eines
einfachen Minuszeichen denselben Effekt, den jetzt die Angabe
eines doppelten Minuszeichen hat, nämlich das Ende der Optionen-
liste zu markieren. Heutzutage kann zwar weiterhin ein einfaches
Minuszeichen angegeben werden, es hat aber keine erkennbaren Aus-
wirkungen.
datei
Wurde die Option -s nicht angegeben, dafür aber datei, dann wird
entsprechend dem Suchpfad nach der Shell-Prozedur datei gesucht.
Für die Prozedur muß das Leserecht gesetzt sein. Falls das s-Bit
für Eigentümer oder Gruppe gesetzt ist, so wird dieses ignoriert.
Kommandos werden wie im Folgenden beschrieben gelesen.
argument
Als Argumente können Sie Kommandos angeben. Der Kommandoname wird
als nulltes Argument übergeben. Die Kommandos sind unten
beschrieben.
Wird die Korn-Shell vom Systemaufruf exec aufgerufen und ist das
erste Zeichen des nullten Arguments ein Minuszeichen -, dann wird
die Shell als Login-Shell behandelt.
Nur rksh
rksh dient zum Einrichten von Login-Namen und Ausführungsumgebungen,
deren Leistungsmöglichkeiten gegenüber der Standard-Shell einge-
schränkt sind. Die Aktionen von rksh sind bis auf die folgenden iden-
tisch mit denen von sh:
- Verzeichnis wechseln [siehe cd(1)],
- Setzen des Wertes von SHELL, ENV oder PATH,
- Angabe von Pfad- oder Kommandonamen, die / enthalten,
- Umlenkung der Ausgabe (>, >|, <> und >>).
Diese Einschränkungen werden aktiviert, nachdem .profile und die ENV-
Dateien interpretiert wurden.
Wenn ein auszuführendes Kommando eine Shell-Prozedur ist, ruft rksh
das Kommando ksh für die Ausführung auf. Somit ist es möglich, dem
Endbenutzer Shell-Prozeduren zur Verfügung zu stellen, die Zugriff zur
vollen Leistung der Standard-Shell haben, aber die Auswahl der verfüg-
baren Kommandos einschränken. Bei diesem Konzept wird davon
Seite 6 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
ausgegangen, daß der Endbenutzer keine Schreib- und Ausführungserlaub-
nis in demselben Verzeichnis hat.
Diese Regeln bedeuten letzten Endes, daß derjenige, der .profile
schreibt, vollständige Kontrolle über die Benutzeraktionen hat, da
bestimmte Setup-Aktionen garantiert ausgeführt werden und der Benutzer
in einem gewünschten Verzeichnis steht (wahrscheinlich nicht dem
Login-Verzeichnis).
Der Systemverwalter wird häufig ein Verzeichnis mit Kommandos einrich-
ten (d. h. /usr/rbin), das gefahrlos von rksh aufgerufen werden kann.
Einige Systeme stellen auch einen eingeschränkten Editor red(1)
bereit.
ALLGEMEINES
Bereitzeichenausgabe
Wenn Sie die Korn-Shell interaktiv benutzen, dann gibt die Shell den
Wert der Umgebungsvariablen PS1 als Bereitzeichen aus, bevor sie ein
Kommando einliest.
Geben Sie zu irgendeiner Zeit ein Neue-Zeile-Zeichen ein und benötigt
die Shell dann noch weitere Eingabe zur Vervollständigung des Komman-
dos, dann zeigt sie dies durch das zweite Bereitzeichen an. Das zweite
Bereitzeichen besteht im allgemeinen aus dem Wert von PS2.
Definitionen
Ein Metazeichen (metacharacter) ist eines der folgenden Zeichen:
; & ( ) | < > Leerzeichen Tabulatorzeichen Neue-Zeile-Zeichen
Ein Blank ist ein Tabulator oder ein Leerzeichen. Ein Bezeichner
besteht aus einer Folge von Buchstaben, Ziffern und dem Unterstrich _,
die mit einem Buchstaben oder dem Unterstrich beginnt. Bezeichner wer-
den als Namen für Funktionen und Variable benutzt. Ein Wort ist eine
Folge von Zeichen, die durch ein oder mehrere nicht entwertete Meta-
zeichen getrennt wird.
Kommandos
Ein Kommando ist eine Folge von Zeichen in der Syntax der Korn-Shell
Programmiersprache. Die Shell liest jedes Kommando und führt die not-
wendige Aktion entweder direkt oder durch den Aufruf eines eigenen
Dienstprogramms aus.
Ein eingebautes Kommando wird von der Korn-Shell direkt, ohne Erzeu-
gung eines weiteren Prozesses, ausgeführt. Die meisten eingebauten
Kommandos können Sie als separate Dienstprogramme implementieren.
Einige Ausnahmen, die zu unerwünschten Nebeneffekten führen können,
sind weiter unten dokumentiert.
Seite 7 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
Ein einfaches Kommando besteht aus einer Folge von Wörtern, die durch
Blanks (Leerzeichen) getrennt sind. Davor kann noch eine Liste von
Variablenwertzuweisungen stehen (siehe Umgebung unten). Das erste Wort
steht für den Namen des auszuführenden Kommandos. Die restlichen Wör-
ter werden als Argumente an das aufgerufene Kommando übergeben, bis
auf später beschriebene Ausnahmen.
Der Kommandoname wird als nulltes Argument übergeben. Der Wert eines
einfachen Kommandos ist sein Endestatus, wenn es normal endet oder
(Oktal) 200 + status, wenn es abnormal endet [signal(5) enthält eine
Liste der status-Werte].
Eine Pipeline besteht aus mehreren Kommandos, die durch den senkrech-
ten Strich | getrennt sind. Die Standardausgabe jedes Kommandos (außer
des letzten) ist durch einen pipe-Systemaufruf mit der Standardeingabe
des folgenden Kommandos verbunden. Jedes Kommando läuft als ein eige-
ner Prozeß, die Korn-Shell wartet, bis der letzte endet. Der Rückgabe-
wert einer Pipeline ist der Rückgabewert des letzten Kommandos.
Eine Kommandofolge ist die Aneinanderreihung einer oder mehrerer Pipe-
lines, die durch eines der Symbole
;, &, && oder ||
getrennt und optional durch
;, & oder |&
abgeschlossen werden. Die Symbole ;, & und |& haben gleichen Vorrang,
der niedriger ist als der von && und ||, die beide ebenfalls gleichen
Vorrang haben. Der Strichpunkt ; nach einer Pipeline steht für sequen-
tielle Ausführung der Pipeline, während das kommerzielle Und & asyn-
chrone Ausführung bedeutet, d. h. die Shell wartet nicht auf die Been-
digung der Pipeline. Das Symbol |& nach einer Kommandofolge veranlaßt
die asynchrone Ausführung der Pipeline oder des Kommandos mit einer
bidirektionalen Pipeline zur Vater-Shell.
Auf die Standardeingabe des erzeugten Kommandos kann die Vater-Shell
mit Hilfe der Option -p des eingebauten Kommandos print schreiben. Von
der Standardausgabe kann die Vater-Shell mit read -p lesen. Beide ein-
gebauten Kommandos werden später beschrieben. Das Symbol && bzw. ||
veranlaßt die Ausführung der auf das Symbol folgenden Kommandofolge
nur dann, wenn die vorausgehende Pipeline den Wert Null (einen Wert
ungleich Null) liefert. In einer Kommandofolge könne eine beliebige
Menge von Neue-Zeile-Zeichen als Trenner anstelle eines Strichpunkts
vorkommen.
Ein Kommando ist entweder ein einfaches Kommando oder eine der folgen-
den zusammengesetzten Anweisungen. Wenn nicht anders angegeben, dann
ist der Rückgabewert eines Kommandos immer der des letzten ausgeführ-
ten einfachen Kommandos.
Seite 8 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
Reservierte Wörter
Die folgenden reservierten Wörter werden nur als erstes Wort eines
Kommandos erkannt und wenn sie nicht entwertet sind.
if then elif else fi case esac for
select while until do done { } function
time [[ ]]
Wörter werden nur erkannt, wenn sie in Begrenzungszeichen eingeschlos-
sen sind (Leerzeichen, Satzzeichen, usw.). Deshalb muß z. B. bei
{ kommandofolge;} nach { ein Leerzeichen stehen und vor } ein Strich-
punkt.
Zusammengesetzte Anweisungen
______________________________________________________________________
for bezeichner [in wortliste];do kommandofolge;done
______________________________________________________________________
oder
______________________________________________________________________
for bezeichner [in wortliste]
do kommandofolge
done
______________________________________________________________________
Mit der for-Anweisung können Sie kommandofolge mehrmals wiederholen.
Dabei wird bezeichner auf jedes Wort der wortliste gesetzt und die
Schleife einmal durchlaufen. Ist in wortliste nicht angegeben, dann
wird kommandofolge für jeden gesetzten Stellungsparameter ("$@") ein-
mal durchlaufen. Die Ausführung endet, wenn wortliste abgearbeitet
ist.
______________________________________________________________________
select bezeichner [in wortliste]
do kommandofolge
done
______________________________________________________________________
Mit der select-Anweisung können Sie kommandofolge mehrmals durch Ein-
gabe gesteuert wiederholen. select schreibt wortliste auf die Stan-
dardausgabe. Dabei wird jedem Wort eine Nummer vorangestellt. Danach
wird das Bereitzeichen PS3 ausgegeben und eine Zeile von der Standard-
eingabe eingelesen. Der Inhalt der gelesenen Zeile wird der Variable
Seite 9 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
REPLY als Wert zugewiesen. Enthält diese Zeile die Nummer eines der
angezeigten Wörter, dann wird an bezeichner das entsprechende Wort als
Wert zugewiesen. Bei leerer Zeile wird die Ausgabe von wortliste wie-
derholt und bezeichner der Name der Shell-Prozedur zugewiesen. Wurde
in wortliste weggelassen, dann werden dafür, wie bei der for-Schleife,
die Stellungsparameter eingesetzt. Die select-Schleife wird solange
durchlaufen, bis sie durch das eingebaute Kommando break oder durch
Eingabe von Dateiende abgebrochen wird.
Beispiel:
Mit dieser Korn-Shell-Prozedur können Sie Informationen über jede
Datei des aktuellen Verzeichnisses einzeln abfragen:
select datei in `ls`
do
if [ -z "$datei" ]
then
echo "Zahl auswaehlen"
else
file $datei
ls -lsid $datei
fi
done
______________________________________________________________________
case wort in
[[(]muster[|muster] ...)kommandofolge;;] ...
esac
______________________________________________________________________
Die case-Anweisung gestattet Ihnen, mustergesteuert auf eine Kommando-
folge zu verzweigen. Die erste kommandofolge, deren muster auf wort
paßt, wird ausgeführt. Die Muster werden in derselben Art angegeben,
wie sie für die Erzeugung von Dateinamen verwendet werden (siehe
Dateinamen-Erzeugung unten).
Vorsicht:
Die optionale öffnende Klammer vor muster müssen Sie angegeben,
wenn Sie case-Anweisungen innerhalb der Kommandosubstitution mit
$(...) verwenden. Damit erreichen Sie paarweise Klammerung inner-
halb von $(...).
Seite 10 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
______________________________________________________________________
if kommandofolge1
then Kommandofolge2
[elif kommandofolge3
then kommandofolge4] ...
[else kommandofolge5]
fi
______________________________________________________________________
Mit der if-Anweisung können Sie entsprechend einer Bedingung verschie-
dene Kommandofolgen ausführen lassen. kommandofolge1 folgend auf if
wird als Bedingung ausgeführt. Ist deren Endestatus 0 gleich wahr,
dann wird kommandofolge2 (then folgend) ausgeführt. Bei falsch wird
die Bedingung kommandofolge3 nach elif ausgeführt. Ist der Endestatus
dieser Bedingung 0, wird kommandofolge4 hinter dem nächsten then aus-
geführt. Im falsch-Fall wird kommandofolge5 nach else ausgeführt.
Wurde keine der Kommandofolgen nach then oder else ausgeführt, dann
bekommt die if-Anweisung den Endestatus 0 zugewiesen.
______________________________________________________________________
while kommandofolge1
do kommandofolge2
done
until kommandofolge1
do kommandofolge2
done
______________________________________________________________________
Durch die while- und until-Anweisungen erhalten Sie Schleifen mit
Abbruchbedingung. Die while-Anweisung führt die Bedingung kommando-
folge1 aus. Im wahr-Fall (Endestatus 0 des letzten ausgeführten einfa-
chen Kommandos) wird der Schleifenkörper kommandofolge2 ausgeführt und
die Bedingung erneut geprüft, während im falsch-Fall die Schleife
beendet wird. Wurde kein Kommando aus kommandofolge2 (nach do) ausge-
führt, dann erhält die while-Anweisung den Endestatus 0 zugewiesen.
Die until-Anweisung können Sie anstelle der while-Anweisung bei
negierter Bedingung verwenden. until prüft nach, ob die Bedingung
falsch ist und bricht, sobald das Ergebnis wahr wird, die Schleife ab.
Seite 11 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
______________________________________________________________________
(kommandofolge)
______________________________________________________________________
kommandofolge wird in einer eigenen Umgebung ausgeführt.
Vorsicht:
Werden zur Schachtelung zwei aufeinanderfolgende öffnende runde
Klammern ( benötigt, dann müssen Sie beide durch ein Leerzeichen
trennen. Es könnte sonst zu einer Verwechslung mit einem arithme-
tischen Ausdruck kommen (siehe Kommandoersetzung unten).
______________________________________________________________________
{ kommandofolge;}
______________________________________________________________________
kommandofolge wird in der aktuellen Korn-Shell einfach ausgeführt.
Vorsicht:
Im Unterschied zu den runden Klammern ( und ) sind die geschweif-
ten Klammern { und } reservierte Wörter. Damit sie als solche
erkannt werden, müssen { und } am Zeilenanfang oder nach einem
Strichpunkt ; stehen.
______________________________________________________________________
[[ bedingung ]]
______________________________________________________________________
Der bedingte Ausdruck bedingung wird bewertet, und der Endestatus bei
wahr auf 0 und bei falsch auf 1 gesetzt.
Siehe Bedingte Ausdrücke unten für eine Beschreibung von bedingung.
______________________________________________________________________
function bezeichner { kommandofolge;}
bezeichner() { kommandofolge;}
______________________________________________________________________
Definition der Funktion mit dem Namen bezeichner. Dieser Name wird wie
bei einem Kommando zum Aufruf verwendet. Der Funktionskörper besteht
aus der kommandofolge, die in geschweifte Klammern eingeschlossen ist.
Vorsicht:
Auf die öffnende Klammer { muß ein Leerzeichen folgen!
Seite 12 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
______________________________________________________________________
time pipeline
______________________________________________________________________
Die Kommandos von pipeline werden ausgeführt und als Statistik die
verstrichene Zeit, die Benutzer- und die System-Zeit auf der Standard-
fehlerausgabe berichtet.
ERSETZUNGEN UND VARIABLEN
Kommentare
Beginnt ein Wort mit dem Nummernzeichen #, dann werden die restlichen
Zeichen der Zeile einschließlich # ignoriert.
Alias-Variablen
Wenn Sie für das erste Wort eines Kommandos eine Alias-Variable defi-
niert haben, dann wird dieses durch den Text der Alias-Variablen
ersetzt. Der Name einer Alias-Variablen kann aus einer beliebigen
Anzahl von Zeichen bestehen, zu denen nicht die Metazeichen, die Ent-
wertungszeichen, die Zeichen für die Dateinamen-, die Parameter- und
Kommandoersetzung und das Gleichheitszeichen = gehören. Die Erset-
zungs-Zeichenkette kann jede korrekte Korn-Shell-Prozedur, inklusive
der vorhergehenden Metazeichen-Aufzählung, enthalten. Das erste Wort
eines jeden Kommandos im ersetzten Text wird wiederum auf weitere
Alias-Variablen getestet. Wenn das letzte Zeichen des Alias-Werts ein
Leerzeichen ist, dann wird das auf die Alias-Ersetzung folgende Wort
ebenfalls auf Alias-Ersetzung untersucht.
Mit Alias-Variablen können Sie eingebaute Shell-Kommandos neu definie-
ren, Sie können sie aber nicht zur Neudefinition der reservierten Wör-
ter (siehe oben) verwenden. Mit Hilfe des alias-Kommandos können
Alias-Variablen definiert, exportiert und zum Auflisten auf die Stan-
dardausgabe geschrieben werden, während sie mit dem unalias-Kommando
wieder gelöscht werden können. Exportierte Alias-Variablen bleiben
wirksam für Prozeduren, die per Name aufgerufen werden, müssen aber
neu für explizite weitere Aufrufe der Korn-Shell initialisiert werden.
Aliasing wird beim Lesen von Prozeduren durchgeführt, und nicht wenn
diese ausgeführt werden. Dementsprechend muß eine Alias-Definition vor
deren erster Verwendung beim Lesen eines Kommandos mit der Alias-
Variablen erfolgen.
Alias-Variablen werden häufig als Abkürzung für volle Pfadnamen ver-
wendet. Eine Option des eingebauten alias-Kommandos sorgt dafür, daß
der Wert der Alias-Variablen automatisch auf den vollen Pfadnamen des
zugehörenden Kommandos gesetzt wird. Diese Alias-Variablen nennt man
"mit Pfad versehene Alias-Variablen" (tracked alias). Der Wert einer
solchen Variablen wird beim ersten Aufsuchen des zugehörenden Komman-
dos definiert und jedesmal zurückgesetzt, wenn die PATH-Variable neu
Seite 13 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
gesetzt wird. Diese Alias-Variablen behalten den Zustand "mit Pfad
versehen", so daß der nächste folgende Zugriff den Wert neu definieren
wird. Einige mit Pfad versehene Alias-Variablen sind mit in die Korn-
Shell übersetzt und kompiliert. Die Option -h des eingebauten Komman-
dos set macht jeden aufgerufenen Kommandonamen zu einer mit Pfad ver-
sehenen Alias-Variablen.
Die folgenden exportierten Alias-Variablen sind in die Korn-Shell kom-
piliert und können neu definiert oder mit unalias gelöscht werden:
autoload='typeset -fu'
false='let 0'
functions='typeset -f'
hash='alias -t'
history='fc -l'
integer='typeset -i'
nohup='nohup '
r='fc -e -'
true=':'
type='whence -v'
Beispiele:
Durch die folgenden Alias-Variablen können Sie l, ll und lf nach-
bilden:
alias l='/bin/ls -m'
alias ll='/bin/ls -l'
alias lf='/bin/ls -CF'
Tilde-Ersetzung
Nach der Alias-Ersetzung wird jedes Wort getestet, ob es mit einer
nicht entwerteten Tilde ~ beginnt. Wenn dies der Fall ist, dann wird
das Wort bis zum nächsten Schrägstrich / auf die Übereinstimmung mit
einem Login-Namen aus der Datei /etc/passwd untersucht. Ist dies gege-
ben, dann wird die Tilde und der Login-Namen durch das Login-Verzeich-
nis des gefundenen Benutzers ersetzt. Dies wird Tilde-Ersetzung ge-
nannt. Wird keine Übereinstimmung gefunden, dann bleibt der Original-
text unverändert. Eine alleinstehende Tilde oder eine Tilde vor einem
Schrägstrich wird durch $HOME ersetzt. Eine Tilde gefolgt von einem
Plus- oder Minuszeichen wird durch $PWD (+) oder $OLDPWD (-) ersetzt.
Tilde-Ersetzung wird auch versucht, wenn der Wert einer Variablenwert-
zuweisung mit einer Tilde beginnt.
Beispiel:
Mit dem Kommando
vi ~/.profile
können Sie von beliebiger Stelle die Datei .profile in Ihrem
Login-Verzeichnis editieren.
Seite 14 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
Kommandoersetzung
Durch die Standardausgabe eines Kommandos können Sie auf zwei Arten
einen Teil eines Wortes oder ein ganzes Wort ersetzen. Bei der ersten
(neuen) Art wird das Kommando in Dollar runde Klammer auf, runde Klam-
mer zu $(...) eingeschlossen. Bei der zweiten (archaischen) Art wird
das Kommando in Gegenhochkommata `...` eingeschlossen. Hier wird die
Zeichenkette zwischen den Hochkommata auf Entwertungen oder Anfüh-
rungszeichen untersucht, bevor das Kommando ausgeführt wird (siehe
Entwertung von Metazeichen unten). Bei beiden Arten werden Neue-
Zeile-Zeichen der Kommandoausgabe gelöscht.
Die Ersetzung $(cat datei) kann durch die äquivalente, aber schnellere
Version $(<datei) durchgeführt werden. Die Ersetzung wird von einge-
bauten Shell-Kommandos, die keine Umlenkung der Ein- oder Ausgabe
durchführen, ohne die Erzeugung eines neuen Prozesses durchgeführt.
Beispiel:
Wenn Sie in einem Verzeichnis alle Dateien mit der Endung .c in
denen die Zeichenkette include enthalten ist, editieren wollen,
dann hilft Ihnen folgendes:
vi $( grep -l include *.c )
grep -l include *.c durchsucht alle Dateien *.c nach der Zeichen-
kette include. Mit der Option -l veranlassen Sie, daß alle
Dateien ausgegeben werden, in denen der Suchstring gefunden
wurde.
Ein arithmetischer Ausdruck, in Dollar doppelte runde Klammer auf und
doppelte runde Klammer zu $((...)) eingeschlossen, wird durch den Wert
des arithmetischen Ausdrucks ersetzt.
Beispiel:
Sie wollen den vorletzten Parameter einer Shell-Prozedur ausge-
ben:
eval print \$$(( $#-1 ))
Korn-Shell-Variablen und Parameterersetzung
Ein Parameter wird durch einen Bezeichner, eine oder mehrere Ziffern
oder eines der folgenden Zeichen dargestellt:
* @ # ? - $ !
Seite 15 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
Eine Variable (ein Parameter gekennzeichnet durch einen Bezeichner)
hat einen Wert und keine oder mehrere Attribute. Variablen können Sie
Werte und Attribute durch das eingebaute Shell-Kommando typeset zuwei-
sen. Die verwendbaren Attribute werden bei typeset beschrieben. Expor-
tierte Parameter geben ihren Wert und die Attribute an die Umgebung
weiter.
Die Korn-Shell stellt eindimensionale Felder zur Verfügung. Ein Ele-
ment des Feldes wird über einen Index angesprochen. Ein Index wird
durch eckige Klammer auf [, gefolgt von einem arithmetischen Ausdruck
und eckige Klammer zu ], beschrieben (zu den arithmetischen Ausdrücken
siehe Arithmetische Berechnungen unten).
Einem Feld können Sie mit dem eingebauten Shell-Kommando set Werte
zuweisen:
set -A bezeichner werte ...
Die Werte aller Indizes müssen im zulässigen Wertebereich liegen. Fel-
der müssen Sie nicht deklarieren, jeder Zugriff auf ein Feldelement
mit zulässigem Index ist erlaubt. Wenn erforderlich, wird das Feld
angelegt. Greifen Sie auf das Feld ohne Index zu, dann greifen Sie auf
das nullte Element zu.
bezeichner=wert [bezeichner=wert] ...
Einer Variablen können Sie in dieser Form einen Wert zuweisen.
Ist für eine Variable das Integer-Attribut gesetzt, dann kann bei
arithmetischen Berechnungen ihr Wert eingesetzt werden. An Stel-
lungsparameter (gekennzeichnet durch eine Zahl) können Sie Werte
mit Hilfe des eingebaute Shell-Kommandos set zuweisen. Der Para-
meter $0 wird beim Aufruf der Shell auf das nullte Argument
gesetzt.
${parameter}
Das Dollar-Zeichen dient zur Einführung von ersetzbaren Parame-
tern. Die Korn-Shell liest alle Zeichen von ${ bis } als Teil
desselben Wortes, auch wenn darin Klammern oder Metazeichen ent-
halten sind. Falls existent, wird der Wert des Parameters einge-
setzt. Die geschweiften Klammern benötigen Sie auch, wenn hinter
parameter Buchstaben, Ziffern oder Unterstrich folgen, die nicht
Teil des Namens des Parameters sind, oder wenn eine Variable
indiziert wird. Besteht parameter aus einer oder mehreren Zif-
fern, dann ist es ein Stellungsparameter. Einen Stellungsparame-
ter mit mehreren Ziffern müssen Sie in geschweifte Klammern ein-
schließen.
Wird parameter durch die Zeichen Stern * oder Klammeraffe @
beschrieben, dann werden alle Stellungsparameter ab $1 einge-
setzt. Als Trenner wird dabei das erste Zeichen der Variablen IFS
verwendet (siehe unten). Ein Feldbezeichner mit Index Stern *
oder Klammeraffe @ wird durch die Werte aller Elemente ersetzt.
Auch hier wird der gleiche Trenner verwendet.
Seite 16 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
${#parameter}
Wird parameter durch die Zeichen Stern * oder Klammeraffe @ gege-
ben, dann wird die Anzahl der Stellungsparameter eingesetzt.
Sonst wird die Länge des Wertes von parameter eingesetzt.
${#bezeichner[*]}
Die Anzahl der Elemente des Feldes bezeichner wird eingesetzt.
${parameter:-wort}
Wenn parameter gesetzt und nicht die leere Zeichenkette ist, dann
wird der Wert, sonst wort eingesetzt.
${parameter:=wort}
Ist parameter nicht gesetzt oder der Wert gleich der leeren Zei-
chenkette, dann wird parameter auf wort gesetzt. Anschließend
wird der Wert eingesetzt.
Stellungsparametern können Sie mit dieser Methode keine Werte
zuweisen.
${parameter:?wort}
Ist parameter gesetzt und der Wert nicht gleich der leeren Zei-
chenkette, dann wird der Wert eingesetzt; sonst wird wort ausge-
geben und die Shell beendet. Fehlt wort, dann wird eine
Standard-Fehlermeldung ausgegeben.
${parameter:+wort}
Wenn parameter gesetzt und nicht die leere Zeichenkette ist, dann
wird wort eingesetzt, sonst die leere Zeichenkette.
${parameter#muster}
${parameter##muster}
Sollte das Korn-Shell-Muster muster auf den Anfang des Wertes von
parameter passen, dann besteht der Ersetzungstext aus dem Wert
von parameter, aus dem der auf muster passende Teil gelöscht
wurde. Sonst wird der Wert von parameter eingesetzt. Bei der
ersten Form der Angabe wird das kürzeste passende Muster, in der
zweiten Form das längste Auftreten des Musters gelöscht.
${parameter%muster}
${parameter%%muster}
Paßt das Korn-Shell-Muster muster auf das Ende des Wertes von
parameter, dann wird der Ersetzungstext aus dem Wert von parame-
ter ohne den gelöschten auf muster passenden Teil gebildet. Bei
der ersten Form der Angabe wird das kürzeste, bei der zweiten
Form das längste passende Muster gelöscht.
In den obigen Kommandos wird das Wort wort nur dann ausgewertet, wenn
es als substituierte Zeichenfolge verwendet werden soll. In dem fol-
genden Beispiel wird pwd z. B. nur dann ausgeführt, wenn dir nicht
gesetzt oder leer ist:
Seite 17 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
echo ${dir:-$(pwd)}
Wird der Doppelpunkt : bei den obigen Ausdrücken weggelassen, dann
kontrolliert die Korn-Shell nur, ob parameter gesetzt ist oder nicht.
Die Überprüfung auf die leere Zeichenkette entfällt.
Die folgenden Parameter werden automatisch von der Korn-Shell gesetzt:
# Die Anzahl (dezimal) der positionellen Parameter.
- Alle Optionen, die beim Aufruf der Korn-Shell oder durch das einge-
baute Kommando set gesetzt wurden.
? Der Endestatus des zuletzt ausgeführten Kommandos.
$ Die Prozeß-Nummer der aktuellen Korn-Shell.
Am Anfang wird der Wert von Unterstrich auf den absoluten Pfadna-
men der Korn-Shell oder der ausgeführten Korn-Shell-Prozedur, wie
er an die Umgebung übergeben wird, gesetzt. Später wird immer das
letzte Argument des vorhergehenden Kommandos als Wert zugewiesen.
Dieser Parameter wird nicht für asynchrone Hintergrund-Kommandos
gesetzt. Bei der Suche nach Post wird der Parameter für die Spei-
cherung des Namens der passenden MAIL-Datei verwendet.
Beispiel:
cat /usr/tmp/mydir/xyz* > alles
tail $
Das Kommando tail greift über $ auf die letzte Datei des vor-
hergehenden cat-Kommandos zu.
! Die Prozeß-Nummer des zuletzt als Hintergrundprozeß gestarteten
Kommandos.
ERRNO
Der Wert dieses Parameters wird vom letzten fehlerhaften Systemauf-
ruf gesetzt. Der Wert ist systemabhängig und dient der Fehlersuche.
LINENO
Die Zeilenummer der aktuellen Zeile in der Prozedur oder in der
Funktion, die gerade ausgeführt wird.
Seite 18 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
OLDPWD
Das letzte aktuelle Verzeichnis, gesetzt durch das cd-Kommando.
OPTARG
Der Wert des letzten Options-Arguments, das von dem eingebauten
Kommando getopts bearbeitet wurde.
OPTIND
Der Index des letzten Options-Arguments, das von dem eingebauten
Kommando getopts bearbeitet wurde.
PPID
Die Prozeß-Nummer des Vater-Prozesses der aktuellen Korn-Shell.
PWD
Das aktuelle Verzeichnis, gesetzt durch das cd-Kommando.
RANDOM
Jedesmal, wenn auf diese Variable zugegriffen wird, wird eine
Zufallszahl aus dem Wertebereich von 0 bis 32767 berechnet. Die
Folge der Zufallszahlen kann durch eine Wertzuweisung an die Varia-
ble RANDOM initialisiert werden.
REPLY
Diese Variable wird bei fehlenden Argumenten von der select-Anwei-
sung oder vom eingebauten Kommando read gesetzt.
SECONDS
Beim Zugriff auf diese Variable enthält ihr Wert die Zeit in Sekun-
den, die seit dem Aufruf der Korn-Shell vergangen ist. Wird der
Variablen ein Wert zugewiesen, dann wird ihr Wert beim Zugriff auf
den Zuweisungswert plus die vergangene Zeit seit der Zuweisung
gesetzt.
Die folgenden Variablen werden von der Korn-Shell benutzt:
CDPATH
Der Suchpfad für das cd-Kommando.
COLUMNS
Wenn diese Variable gesetzt ist, dann wird ihr Wert für die Defi-
nition der Breite des Editierfensters beim Editiermodus der
Korn-Shell und für die Ausgabe des select-Liste verwendet.
EDITOR
Endet der Wert dieser Variable mit emacs, gmacs oder vi und ist
die Variable VISUAL nicht gesetzt, dann wird die entsprechende
Option (siehe Eingebaute Kommandos unten, set) gesetzt.
Seite 19 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
ENV Wenn diese Variable gesetzt ist, dann enthält ihr Wert den Pfad-
namen der Prozedur, die bei Aufruf der Korn-Shell ausgeführt
wird. Diese Prozedur wird meist für Funktions- und Alias-Defini-
tionen benutzt. Auf den Wert der Variablen wird Parametererset-
zung zur Dateinamen-Erzeugung durchgeführt.
FCEDIT
Der Name des Standard-Editors für das eingebaute Kommando fc.
FPATH
Der Suchpfad für Funktionsdefinitionen. Dieser Pfad wird verwen-
det, wenn auf eine Funktion mit Attribut -u zugegriffen wird und
wenn kein Kommando gefunden wurde. Wird eine ausführbare Datei
gefunden, dann wird sie gelesen und in der momentanen Umgebung
ausgeführt.
IFS (Internal field separators) Interner Feldtrenner der Korn-Shell,
der zur Trennung von Wörtern dient, die aus Kommando- oder Para-
meterersatz entstehen. Der Feldtrenner wird auch durch das einge-
baute Kommando read verwendet. Normalerweise ist der Wert auf
Leer-, Tabulator- und Neue-Zeile-Zeichen gesetzt. Das erste Zei-
chen der IFS-Variable wird zur Trennung der Argumente bei der
Ersetzung von "$*" verwendet (siehe Entwertung von Metazeichen
unten).
HISTFILE
Ist diese Variable bei Aufruf der Korn-Shell gesetzt, dann wird
der Wert als Pfadname für die Datei zur Speicherung der Komman-
do-History verwendet (siehe Kommando-Wiederaufruf unten).
HISTSIZE
Wenn diese Variable bei Aufruf der Korn-Shell gesetzt ist, dann
behält die Shell den Text eingegebener Kommandos in Erinnerung.
Sie können mindestens auf die als Wert angegebene Anzahl von frü-
her eingegebenen, und der Korn-Shell zugänglichen, Kommandos
zurückgreifen. Der Standard-Wert ist 128.
HOME Das Standard-Argument (Login-Verzeichnis) für das Kommando cd.
LINES
Wenn diese Variable gesetzt ist, dann wird ihr Wert für die
Berechnung der Spaltenzahl für die Ausgabe von select-Listen ver-
wendet. select-Listen werden vertikal ausgegeben, bis ungefähr
zwei drittel der Zeilenzahl LINES gefüllt sind.
MAIL Enthält der Wert dieser Variable den Namen einer Mail-Datei und
ist die Variable MAILPATH nicht gesetzt, dann informiert Sie die
Korn-Shell über das Eintreffen von Post in dieser Datei.
Seite 20 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
MAILCHECK
Der Wert dieser Variable gibt an, nach welchem Zeitintervall in
Sekunden die Korn-Shell jeweils nach Änderungen der Modifikati-
onszeit der, durch die Variablen MAIL oder MAILPATH, ausgewiese-
nen Dateien sehen soll. Der Standard-Wert für MAILCHECK ist 600.
Wenn die angegebene Zeit verstrichen ist, dann prüft die Korn-
Shell vor der Ausgabe des nächsten Bereitzeichens nach.
MAILPATH
Eine durch Doppelpunkt : getrennte Liste von Dateinamen. Bei
gesetzter Variable informiert Sie die Korn-Shell über jede Ände-
rung an den Dateien der Liste, die innerhalb der letzten
MAILCHECK Sekunden erfolgt sind. Jeder Dateiname kann in der
Liste von einem Fragezeichen ? und einem Mitteilungstext, der
ausgegeben werden soll, gefolgt werden. Diese Mitteilung wird der
Parameter-Ersetzung mit der Variable $ unterzogen. $ enthält zu
diesem Zeitpunkt den Namen der Datei, die sich geändert hat. Die
Standard-Mitteilung ist: "you have mail in $".
PATH Der Suchpfad für Kommandos (siehe Ausführung unten). Sie können
den Wert dieser Variable nicht verändern, wenn sie eine einge-
schränkte Korn-Shell benutzen.
PS1 Der Wert dieser Variablen wird für den Parameterersatz expan-
diert, um das Bereitzeichen der Korn-Shell zu definieren. Der
Standardwert ist "$ ". Das Ausrufezeichen ! im Bereitzeichen wird
durch die Kommando-Nummer (siehe Kommando-Wiederaufruf unten)
ersetzt.
PS2 Das zweite Bereitzeichen, das die Korn-Shell ausgibt, wenn sie
noch weitere Eingabe nach einem Neue-Zeile-Zeichen erwartet. Der
Standardwert ist "> ".
PS3 Das Bereitzeichen für die select-Anweisung, das zur Abfrage der
Nummer innerhalb der select-Schleife verwendet wird. Der Stan-
dardwert ist "#? ".
PS4 Der Wert dieser Variablen wird vor jeder Zeile einer Ausführungs-
verfolgung (execution trace) ausgegeben. Der Wert dieser Varia-
blen wird für den Parameterersatz expandiert. Der Standardwert
ist "+ ".
SHELL
Der Pfadnamen der Korn-Shell wird in der Umgebung gehalten. Beim
Aufruf wird die Korn-Shell zu einer eingeschränkten Shell, wenn
auf den Dateinamesteil des Pfadnamens [siehe basename(1)] das
Muster *r*sh* paßt.
Seite 21 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
TMOUT
Ist der Wert dieser Variablen positiv, dann beendet die Korn-
Shell selbständig, wenn nach Ausgabe des Bereitzeichens (PS1)
nicht innerhalb der angegebenen Zeitspanne (in Sekunden) ein Kom-
mando eingegeben wird.
(Vorsicht: Die Korn-Shell kann mit einem Maximalwert für TMOUT
kompiliert worden sein, der nicht überschritten werden kann.)
VISUAL
Endet der Wert dieser Variablen mit emacs, gmacs oder vi, dann
wird die entsprechende Option (siehe Eingebaute Kommandos unten)
gesetzt.
Die Korn-Shell weist den folgenden Variablen Standardwerte zu:
PATH, PS1, PS2, MAILCHECK, TMOUT und IFS.
Die Variablen HOME, MAIL und SHELL werden vom Kommando login
gesetzt.
Blank-Ersetzung
Nach Parameter- und Kommandoersetzung wird das Ergebnis nach Feld-
trennzeichen durchsucht und an den Fundstellen in selbständige Argu-
mente unterteilt. Die Feldtrenner werden durch den Wert der Variable
IFS definiert. Explizit vorhandene leere Zeichenketten (z. B. "" oder
'') bleiben dabei erhalten. Implizit vorhandene leere Zeichenketten,
wie sie z. B. von Parametern ohne Wert herrühren, werden entfernt.
Dateinamen-Erzeugung
Nach den verschiedenen Ersetzungen wird jedes Wort auf das Auftreten
von Stern *, Fragezeichen ? oder öffnende eckige Klammer [ hin unter-
sucht. Dies geschieht aber nur dann, wenn die Option -f (siehe set
unten) nicht gesetzt wurde. Wird eines dieser Zeichen in einem Wort
gefunden, dann wird dieses Wort als Muster betrachtet. Das Wort wird
dann durch lexikographisch sortierte Dateinamen ersetzt, die auf das
Muster passen. Wurde für das Muster kein Dateiname gefunden, dann wird
das Wort unverändert gelassen. Wenn Sie Muster für die Erzeugung von
Dateinamen verwenden, müssen Sie den Zeichen Punkt . und Schrägstrich
/ besondere Aufmerksamkeit widmen - bei anderen Ersetzungen gilt diese
Sonderbehandlung der beiden Zeichen nicht. Punkt am Anfang eines
Dateinamens oder unmittelbar nach / sowie / selber müssen explizit
passen.
* Wird durch jede Zeichenkette, auch die leere, ersetzt.
? Wird durch ein beliebiges Zeichen ersetzt. (Zur Behandlung von /
und . siehe oben.)
Seite 22 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
[...]
Wird durch genau ein Zeichen ersetzt, das in der Zeichenmenge
innerhalb der eckigen Klammern enthalten ist.
Ein Zeichenpaar, getrennt durch das Minuszeichen -, steht für
alle Zeichen, die lexikographisch zwischen diesem Paar (inklusiv)
liegen. Das Minuszeichen kann als erstes oder letztes Zeichen in
die Menge aufgenommen werden.
Ein Ausrufezeichen ! nach der öffnenden eckigen Klammer [ negiert
die Zeichenmenge, d. h. es werden alle nicht enthaltenen Zeichen
angesprochen.
Eine musterliste ist eine Liste aus einem oder mehreren Mustern, die
voneinander durch den senkrechten Strich | getrennt werden. Zusammen-
gesetzte Muster können aus einem oder mehreren der folgenden Kon-
strukte geformt werden:
?(musterliste)
steht für kein- oder einmaliges Auftreten eines der angegebenen
Muster.
*(musterliste)
steht für kein- oder mehrmaliges Auftreten eines der angegebenen
Muster.
+(musterliste)
steht für mindestens einmaliges Auftreten eines der angegebenen
Muster.
@(musterliste)
Es muß genau eines der angegebenen Muster passen.
!(musterliste)
steht für alles, nur nicht für die angegebenen Muster.
Entwertung von Metazeichen (quoting)
Jedes der oben definierten Metazeichen (siehe Definitionen oben) hat
eine spezielle Bedeutung für die Korn-Shell und dient auch als Trenner
von Wörtern, falls es nicht entwertet wurde. Ein Zeichen kann durch
Voranstellen des Gegenschrägstriches \ entwertet werden, damit es
allein für sich steht. Das Paar \Neue-Zeile-Zeichen wird von der
Korn-Shell ignoriert oder gelöscht. Alle Zeichen, die in Hochkommata
'...' eingeschlossen sind, sind entwertet. Ein einzelnes Hochkomma
kann jedoch nicht darin vorkommen. Zeichenketten in Anführungszeichen
"..." eingeschlossen unterliegen der Parameter- und Kommandoersetzung.
Durch Gegenschrägstrich können Sie hier Gegenschrägstrich \, Gegen-
hochkomma `, Anführungszeichen " und Dollarzeichen $ entwerten.
Seite 23 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
Die Bedeutung der Angaben $* und $@ sind gleich, wenn sie nicht in
Anführungszeichen eingeschlossen sind oder als Dateiname oder Wert für
die Variablenwertzuweisung verwendet werden. Ihre Bedeutung ist unter-
schiedlich, wenn beide für sich in Anführungszeichen eingeschlossen
als Kommandoargument verwendet werden. "$*" entspricht dann
"$1 $2 ...", wenn ein Blank das erste Zeichen im Wert der Variable
IFS ist, und "$@" steht dann für "$1" "$2" ..., d. h. die einzelnen
Aufrufargumente bleiben erhalten.
Bei in Gegenhochkommata `...` eingeschlossenen Zeichenketten können
Sie mit dem Gegenschrägstrich \ den Gegenschrägstrich \, das Gegen-
hochkomma ` und das Dollarzeichen $ entwerten. Sollte das Ganze noch
in Anführungszeichen "...`...`..." eingeschlossen sein, dann können
Sie mit den Gegenschrägstrich \ auch noch das Anführungszeichen " ent-
werten.
Die spezielle Bedeutung der reservierten Wörter oder Alias-Variablen
kann durch Entwertung jedes einzelnen Zeichen anulliert werden. Das
Erkennen der Namen von Funktionen und von eingebauten Kommandos kann
nicht auf diese Weise unterdrückt werden.
Arithmetische Berechnungen
Durch das eingebaute Kommando let steht Ganzzahl-Arithmetik zur Verfü-
gung. Die Berechnungen werden auf der Basis von Long-Arithmetik durch-
geführt. Konstanten werden in der Form [basis#]n dargestellt. Dabei
ist basis eine ganze Zahl zwischen 2 und 36 und gibt die Basis an, und
n ist eine Zahl zu dieser Basis. Fehlt basis#, dann wird im Zehnersy-
stem gerechnet.
Der arithmetischer Ausdruck ist stark an die Programmiersprache C
angelehnt. Er benutzt dieselbe Syntax, gleiche Vorrangregeln und Asso-
ziativität. Alle unerläßlichen Operatoren außer ++, --, ?: und Komma ,
sind vorhanden. Auf den Wert von Variablen kann über deren Namen zuge-
griffen werden, Sie müssen kein Dollarzeichen verwenden. Wenn der Wert
einer Variablen eingesetzt wird, dann wird ihr Wert als arithmetischer
Ausdruck berechnet.
Durch die Option -i des eingebauten Kommandos typeset kann als Attri-
but für die interne Darstellung des Wertes einer Variablen die Ganz-
zahldarstellung gewählt werden. Bei jeder Wertzuweisung auf eine
Variable mit dem -i-Attribut wird eine arithmetische Berechnung durch-
geführt. Wird keine Basis für die Berechnungen angegeben, dann wird
die Basis der ersten Wertzuweisung an die Variable verwendet. Diese
Basis wird auch bei der Durchführung von Parameterersetzung verwendet.
Da einige der arithmetischen Operatoren für die Korn-Shell entwertet
werden müssen, wurde eine alternative Form zum eingebauten Kommando let
eingeführt. Bei jedem Kommando, das mit doppelter runder Klammer auf ((
beginnt, werden alle Zeichen bis zum schließenden runden Klammerpaar ))
als entwertet genommen. ((a=a+b)) entspricht somit let "a=a+b".
Seite 24 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
Bedingte Ausdrücke
Einen bedingten Ausdruck verwenden Sie zum Testen der Eigenschaften
von Dateien, für algebraische Vergleiche und zum Vergleich von Zei-
chenketten. In der Korn-Shell werden die bedingten Ausdrücke innerhalb
der Anweisung [[...]] angegeben. Die Ersetzung von Blanks und die
Erzeugung von Dateinamen werden nicht auf die Wörter des bedingten
Ausdrucks angewandt. Jeder bedingte Ausdruck kann aus einem oder meh-
reren der folgenden unitären oder binären Ausdrücken gebildet werden:
Eigenschaften von Dateien
Ist in den folgenden Ausdrücken datei von der Form /dev/fd/n (fd -
file descriptor, n ist eine ganze Zahl), dann wird der Test auf die
geöffnete Datei mit Dateikennzahl n durchgeführt.
-a datei
(a - access) Wahr, wenn datei existiert.
-b datei
(b - block device) Wahr, wenn datei existiert und ein blockorien-
tiertes Gerät ist.
-c datei
(c - character device) Wahr, wenn datei existiert und ein zei-
chenorientiertes Gerät ist.
-d datei
(d - directory) Wahr, wenn datei existiert und ein Verzeichnis
ist.
-f datei
(f - file) Wahr, wenn datei existiert und eine einfache Datei
ist.
-g datei
(g - group ID) Wahr, wenn datei existiert und das set-user-ID-Bit
für die Gruppe gesetzt ist.
-k datei
(k - sticky) Wahr, wenn datei existiert und das sticky- oder
t-Bit gesetzt ist.
-o option
(o - option) Wahr, wenn die angegebene Option option aktiv ist,
wobei option mit dem vollen Optionsnamen angegeben sein muß,
z. B. errexit (option kann mit set gesetzt werden).
-p datei
(p - pipe) Wahr, wenn datei existiert und eine benannte Pipe
(FIFO) oder eine Pipe ist.
Seite 25 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
-r datei
(r - read) Wahr, wenn datei existiert und der aktuelle Prozeß das
Leserecht hat.
-s datei
(s - size) Wahr, wenn datei existiert und nicht leer ist.
-t dateikennzahl
(t - terminal) Wahr, wenn dateikennzahl geöffnet und einem Termi-
nal zugeordnet ist.
-u datei
(u - user ID) Wahr, wenn datei existiert und das set-user-ID-Bit
für den Eigentümer gesetzt ist.
-w datei
(w - write) Wahr, wenn datei existiert und der aktuelle Prozeß
das Schreibrecht hat.
-x datei
(x - execute) Wahr, wenn datei existiert und der aktuelle Prozeß
das Ausführrecht hat. Existiert datei und ist sie ein Verzeich-
nis, dann muß für wahr der aktuelle Prozeß das Recht zum Durch-
laufen haben.
-G datei
(G - group) Wahr, wenn datei existiert und die Gruppe der Datei
der effektiven Gruppennummer des aktuellen Prozesses entspricht.
-L datei
(L - symbolic link) Wahr, wenn datei existiert und ein symboli-
scher Link ist.
-O datei
(O - owner) Wahr, wenn datei existiert und der Eigentümer der
Datei der effektiven Benutzernummer des aktuellen Prozesses ent-
spricht.
-S datei
(S - socket) Wahr, wenn datei existiert und ein Socket ist.
datei1 -nt datei2
(nt - newer than) Wahr, wenn datei1 existiert und neuer als
datei2 ist.
datei1 -ot datei2
(ot - older than) Wahr, wenn datei1 existiert und älter als
datei2 ist.
datei1 -ef datei2
(ef - equal file) Wahr, wenn datei1 und datei2 existieren und
beide ein Verweis auf dieselbe Datei sind.
Seite 26 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
Eigenschaften und Vergleiche von Zeichenketten
-n zeichenkette
(n - non zero) Wahr, wenn die zeichenkette existiert und nicht
die leere Zeichenkette ist, also eine Länge größer 0 hat.
-z zeichenkette
(z - zero) Wahr, wenn die angegebene zeichenkette die leere Zei-
chenkette ist, also die Länge 0 hat.
zeichenkette = muster
Wahr, wenn zeichenkette auf muster paßt.
zeichenkette != muster
Wahr, wenn zeichenkette nicht auf muster paßt.
zeichenkette1 < zeichenkette2
Wahr, wenn zeichenkette1 alphabetisch (ASCII-Ordnung) vor zei-
chenkette2 liegt.
zeichenkette1 > zeichenkette2
Wahr, wenn zeichenkette1 alphabetisch (ASCII-Ordnung) nach zei-
chenkette2 liegt.
Algebraischer Vergleich ganzer Zahlen
zahl1 -eq zahl2
(eq - equal) Wahr, wenn zahl1 gleich zahl2 ist.
zahl1 -ne zahl2
(ne - not equal) Wahr, wenn zahl1 ungleich zahl2 ist.
zahl1 -lt zahl2
(lt - less than) Wahr, wenn zahl1 kleiner zahl2 ist.
zahl1 -gt zahl2
(gt - greater than) Wahr, wenn zahl1 größer zahl2 ist.
zahl1 -le zahl2
(le - less than or equal) Wahr, wenn zahl1 kleiner oder gleich
zahl2 ist.
zahl1 -ge zahl2
(ge - greater than or equal) Wahr, wenn zahl1 größer oder gleich
zahl2 ist.
Bedingungen verknüpfen oder negieren
Mehrere Bedingungen können Sie miteinander zu einem Ausdruck verknüp-
fen. Die folgenden Konstrukte sind nach Priorität geordnet, Klammerung
hat die höchste, das logische ODER die niedrigste Priorität:
Seite 27 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
( bedingung )
bedingung steht hier für (eine oder) mehrere Bedingungen, die
beliebig miteinander verknüpft sind. Der Ausdruck ist wahr, wenn
bedingung wahr ist.
! bedingung
Negation: Wahr, wenn bedingung falsch ist.
bedingung1 && bedingung2
Logisches UND: Wahr, wenn bedingung1 und bedingung2 wahr sind.
bedingung1 || bedingung2
Logisches ODER: Wahr, wenn entweder bedingung1 oder bedingung2
wahr ist.
Ein-/Ausgabeumlenkung
Vor der Ausführung eines Kommandos können Sie dessen Ein- und Ausgabe
umlenken. Dazu benutzen Sie eine spezielle Notation, die von der
Korn-Shell interpretiert wird. Die folgenden Angaben können bei einem
einfachen Kommando an beliebiger Stelle oder vor oder nach einem Kom-
mando stehen. Diese Angaben werden nicht an das aufzurufende Kommando
übergeben, sondern von der Korn-Shell interpretiert. Parameter- und
Kommandoersetzung werden durchgeführt, bevor datei oder dateikennzahl
eingesetzt werden. Die Dateinamen-Erzeugung wird nur dann durchge-
führt, wenn das Muster zu genau einem Dateinamen führt. Blank-Erset-
zung wird nicht durchgeführt.
<datei
Lenkt die Standardeingabe (Dateikennzahl 0) des Kommandos auf
datei um, das Kommando liest seine Eingabe aus datei.
>datei
Lenkt die Standardausgabe (Dateikennzahl 1) des Kommandos auf
datei um, das Kommando schreibt seine Ausgabe in datei. Existiert
die Datei noch nicht, wird sie neu angelegt. Existiert datei als
einfache Datei bereits und ist die Option noclobber (siehe Einge-
baute Kommandos unten, set -o) gesetzt, dann gibt dies einen Feh-
ler. Ist noclobber nicht gesetzt, dann wird der bisherige Inhalt
der Datei gelöscht.
>|datei
Entspricht >datei, mit dem Unterschied, daß die Einstellung der
Option noclobber ignoriert wird.
>>datei
Lenkt die Standardausgabe (Dateikennzahl 1) des Kommandos auf
datei um, das Kommando schreibt seine Ausgabe in datei. Wenn
datei bereits existiert, wird die Ausgabe an den bisherigen
Inhalt angehängt. Sonst wird die Datei neu angelegt.
Seite 28 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
<>datei
datei wird zum Lesen und Schreiben als Standardeingabe geöffnet.
<<[-]zeichenkette
Leitet ein Here-Dokument ein. An zeichenkette wird weder
Parameter- und Kommandoersetzung noch Dateinamen-Erzeugung durch-
geführt. Die Eingabe für die Korn-Shell wird bis ausschließlich
zu einer Zeile, die nur zeichenkette enthält, oder bis zum Datei-
ende gelesen. Das so gelesene Here-Dokument findet als Standard-
eingabe für das Kommando Verwendung.
Ist eines der Zeichen von zeichenkette entwertet, dann sind für
die Korn-Shell alle Zeichen des Here-Dokuments entwertet.
Vorsicht:
zeichenkette in der schließenden Zeile darf nicht entwertet
sein.
Ist zeichenkette nicht entwertet, dann
- wird Parameter- und Kommandoersetzung durchgeführt
- wird die Zeichenfolge \Neue-Zeile-Zeichen ignoriert
- müssen durch Gegenschrägstrich \ der Gegenschrägstrich \, das
Dollarzeichen $, das Gegenhochkomma ` und der erste Buchstabe
von zeichenkette entwertet werden, wenn Bedarf dafür im Text
besteht.
Durch die Angabe von <<- werden alle führenden Tabulatorzeichen
von den Zeilen des Here-Dokuments und vor zeichenkette gelöscht.
<&dateikennzahl
>&dateikennzahl
Bei der ersten Form wird die Standardeingabe durch Duplizieren
von dateikennzahl umgelenkt. Die Standardeingabe liest aus der
Datei, die an die Dateikennzahl angeschlossen ist. Die zweite
Form gilt analog für die Standardausgabe.
<&-
>&- Durch die erste Form wird für das Kommando die Standardeingabe
geschlossen, das Kommando erhält nur Datei-Ende als Eingabe. Die
zweite Form gilt für die Standardausgabe, das Kommando gibt
nichts aus.
<&p
>&p Die Eingabe vom Koprozeß bei einer bidirektionalen Pipeline wird
auf die Standardeingabe umgelenkt. Analog wird die Ausgabe auf
die Standardausgabe umgelenkt.
Seite 29 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
Wird einer der obigen Anweisungen eine Nummer vorangestellt, dann wird
die Dateikennzahl mit dieser Nummer (anstelle der 0 bzw. stdin und 1
bzw. stdout) angesprochen.
Beispiel:
Das folgende Beispiel öffnet Dateikennzahl 2 (stderr) zum Schrei-
ben als ein Duplikat von Dateikennzahl 1 (stdout):
... 2>&1
Die Reihenfolge der Angabe der Umlenkungen ist signifikant. Die Korn-
Shell bewertet jede Umlenkung bezogen auf die Verbindung (Dateikenn-
zahl, Datei) zum Zeitpunkt der Bewertung. D. h.
... 1>datei 2>&1
verbindet zuerst die Standardausgabe (Dateikennzahl 1) mit datei und
verbindet dann die Standardfehlerausgabe (Dateikennzahl 2) mit der
Datei, die mit Dateikennzahl 1 (also mit datei) verbunden ist. datei
enthält nach Ausführung die Standardausgabe und die Fehlermeldungen
des Kommandos.
Wäre die Reihenfolge umgekehrt, dann wäre Dateikennzahl 2 mit dem Ter-
minal (falls Dateikennzahl 1 damit verbunden war) und Dateikennzahl 1
mit datei verbunden. Das heißt also: datei enthält dann nur noch die
Standardausgabe, aber nicht die Fehlermeldungen.
Wird ein Kommando mit & im Hintergrund gestartet, ohne aktive Auf-
tragssteuerung, dann wird standardmäßig die Standardeingabe mit der
leeren Datei /dev/null verbunden. Bei aktiver Auftragssteuerung ent-
hält die Umgebung für die Ausführung des Kommandos die Dateikennzahlen
der ausführenden Korn-Shell, wie sie von den Anweisungen für Ein- und
Ausgabe geändert wurden.
Sie können aus einem Skript Kommandos oder Pipelines im Hintergrund
starten. Diese können dann mit Ihrem Programm kommunizieren. Um einen
solchen Ko-Prozeß zu starten, stellen Sie dem Kommando den Operator |&
nach. Verwenden Sie bidirektionale Pipes nur in Skripts, jedoch nicht
auf der Kommandozeile.
Kommandofolgen lassen sich nur einmal als bidirektionale Pipes aufru-
fen. Wenn Sie den ursprünglichen Prozeß abgebrochen haben (z. B. mit
kill -9 PID) und zu einem späteren Zeitpunkt nochmals versuchen, ein
Kommando in eine bidirektionale Pipe zu schreiben, wird zwar eine Sub-
shell aufgerufen, aber der Prozeß gestoppt. Sie erhalten die Fehler-
meldung ksh: bad file unit number.
Seite 30 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
ABLAUFUMGEBUNG
Umgebung
Die Umgebung eines Prozesses enthält eine Liste aus Paaren name=wert,
die an ein ausgeführtes Programm in gleicher Weise wie eine normale
Argumentliste übergeben wird. Die Namen name müssen Bezeichner im
Sinne der Korn-Shell sein, die Werte wert Zeichenketten (auch die
leere). Die Korn-Shell und die Umgebung beeinflußen sich gegenseitig.
Beim Aufruf durchsucht die Korn-Shell die Umgebung und erzeugt eine
Variable für jeden gefundenen Namen, weist ihr den entsprechenden Wert
zu und markiert sie als exportiert. Ausgeführte Kommandos erben diese
Umgebung. Modifiziert der Benutzer die Werte dieser Variablen oder
fügt neue Variablen mit Hilfe der eingebauten Kommandos export oder
typeset -x dazu, dann werden diese Teil der Umgebung. Die Umgebung,
die von jedem ausgeführten Kommando gesehen wird, besteht aus den Paa-
ren name=wert, die ursprünglich von der Korn-Shell geerbt wurden,
deren Werte von der aktuellen Shell modifiziert worden sein können,
plus den Erweiterungen die mit export oder typeset -x markiert wurden.
Die Umgebung eines einfachen Kommandos oder einer Funktion kann durch
Voranstellen von Variablenwertzuweisungen erweitert werden. Eine
Variablenwertzuweisung wird als Wort behandelt und hat die Form
bezeichner=wert.
Die folgenden Zeilen sind für kommando äquivalent:
TERM=450 kommando argumente
( export TERM ; TERM=450 ; kommando argumente )
(Bei manchen eingebauten Kommandos gibt es Abweichungen zu dieser
Regel. Im Abschnitt Eingebaute Kommandos unten sind diese mit + bzw.
++ markiert.)
Wurde die Option -k beim Aufruf der Korn-Shell oder durch das einge-
baute Kommando set gesetzt, dann werden alle Variablenwertzuweisungen
in die Umgebung exportiert, auch wenn sie nach dem Kommandonamen kom-
men.
Beispiel: Das folgende Beispiel gibt zuerst a=b c und dann c aus:
echo a=b c
set -k
echo a=b c
Diese Eigenschaft sollten Sie nur in Verbindung mit Prozeduren, die
für ältere Versionen der Bourne-Shell geschrieben wurden, verwenden.
Greifen Sie bei neuen Prozeduren nicht darauf zurück, denn die Option
-k wird in zukünftigen Programmversionen nicht mehr implementiert
sein.
Seite 31 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
Funktionen
Das reservierte Wort function (siehe Zusammengesetzte Anweisungen
oben) wird zur Definition von Korn-Shell-Funktionen benutzt. Funktio-
nen werden von der Shell eingelesen und intern gespeichert. Alias-
Namen werden aufgelöst, wenn die Funktion gelesen wird. Funktionen
werden wie Kommandos ausgeführt, Argumente werden als Stellungsparame-
ter übergeben (siehe Ausführung unten).
Funktionen werden im aktuellen Prozeß ausgeführt und haben Zugriff auf
alle geöffneten Dateien und das aktuelle Verzeichnis.
Signale (traps), die vom Aufrufer abgefangen werden, werden innerhalb
der Funktion auf ihre Standard-Aktion zurückgesetzt. Ein Signal, das
von der Funktion weder abgefangen noch ignoriert wird, führt zum
Abbruch der Funktion. Dieses Signal wird an den Aufrufer der Funktion
weitergegeben. Eine EXIT-trap-Behandlung, die innerhalb einer Funktion
gesetzt wurde, wird nach Beendigung der Funktion in der Umgebung des
Aufrufers ausgeführt. Normalerweise werden die Variablen von Aufrufer
und Funktion gemeinsam benutzt.
Das eingebaute Kommando typeset kann jedoch dazu benutzt werden,
innerhalb einer Funktion lokale Variablen zu definieren, deren Gültig-
keitsbereich dann die Funktion und alle aufgerufenen Funktionen
umfaßt.
Das eingebaute Kommando return wird zur Rückkehr von Funktionen ver-
wendet. Fehler, die innerhalb einer Funktion auftreten, geben die Kon-
trolle an den Aufrufer zurück.
Die Bezeichner oder Namen von Funktionen können Sie mit Hilfe des ein-
gebauten Kommandos typeset und einer der Optionen -f oder +f aufli-
sten, den Text der Funktionen mit der Option -f auflisten lassen. Eine
Funktion können Sie mit dem eingebaute Kommando unset und der Option
-f löschen.
Normalerweise kann man auf die Funktionen nicht zugreifen, während die
Korn-Shell eine Prozedur ausführt.
Durch die Option -xf des eingebauten Kommandos typeset können Funktio-
nen als exportierbar markiert werden. Diese Funktionen können Sie dann
in Prozeduren, die ohne einen weiteren Aufruf der Korn-Shell ausge-
führt werden, verwenden. Funktionen, die über mehrere Aufrufe der
Korn-Shell bekannt sein sollen, müssen Sie in der ENV-Datei mit
typeset -xf definieren.
Beispiel:
Die folgende Funktion lh gibt Ihnen die obersten zwei Schichten
der Verzeichnis-Hierarchie aus, an der Sie stehen oder die Sie
als Argument angegeben haben. Einfache Dateien als Argument wer-
den ignoriert.
Seite 32 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
function lh
{
for i in ${*:-.}
do
if [[ -d $i ]]
then
print $i:
cd $i
ls -CF $( ls )
cd - >/dev/null
fi
done
}
Die for-Schleife arbeitet die Argumente einzeln ab. Haben Sie
kein Argument angegeben, wird das aktuelle Verzeichnis (.) für $*
gesetzt.
Liegt ein Verzeichnis vor, dann wird dessen Name und Inhalt ange-
zeigt: cd $i wechselt zu dem anzuzeigenden Verzeichnis, $( ls )
wird durch den Inhalt des Verzeichnisses $i ersetzt und ls -CF
verzeichnisinhalt gibt Ihnen die Dateien, gefolgt von den Inhal-
ten der Verzeichnisse, mit Markierungen für Ausführbarkeit und
Verzeichnisse wieder. Das folgende cd-Kommandos geht "schweigsam"
zum Ausgangsverzeichnis (vor dem ersten cd $i) zurück.
Aufträge
Ist die monitor-Option des eingebauten Kommandos set eingeschaltet,
dann verknüpft eine interaktive Korn-Shell mit jeder Pipeline einen
Auftrag. Die Shell hält eine Tabelle der aktuellen Aufträge, die Sie
mit dem eingebauten Kommando jobs auf die Standardausgabe schreiben
können. Jedem Auftrag wird ein kleine ganze Zahl zugewiesen. Wird ein
Auftrag im Hintergrund (&) gestartet, dann gibt die Shell eine Zeile
der folgenden Form aus: [1] 1234
Diese Zeile besagt, daß der Auftrag im Hintergrund mit der Auftrags-
nummer 1 gestartet wurde und einen (Top-Level) Prozeß mit der Prozeß-
nummer 1234 hat.
Möchten Sie andere Prozesse starten, während ein Prozeß ausgeführt
wird, dann brauchen Sie nur die Tastenkombination <CTRL-Z> zu drücken.
Diese bewirkt, daß ein STOP-Signal an den laufenden Prozeß gesendet
wird. Die Korn-Shell wird dann anzeigen, daß der Auftrag gestoppt
(stopped) wurde, und ein Bereitzeichen ausgeben. Sie können dann den
Zustand dieses Auftrages manipulieren: Den Auftrag mit Hilfe des ein-
gebauten Kommandos bg (background) im Hintergrund weiterlaufen lassen,
ihn im gestoppten Zustand lassen und andere Kommandos ausführen oder
wieder in den Vordergrund durch das eingebaute Kommando fg (fore-
ground) holen.
Seite 33 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
<CTRL-Z> wird sofort behandelt, wenn es gedrückt wird und ist in sei-
ner Auswirkung mit der Unterbrechung <CTRL-D> vergleichbar. Ungelesene
Eingaben und noch nicht angezeigte Ausgaben werden weggeworfen.
Ein Hintergrundauftrag wird gestoppt, wenn er versucht, von einem Ter-
minal zu lesen. Hintergrundaufträge dürfen normalerweise Ausgaben pro-
duzieren. Sie können dies durch das Kommando stty tostop verbieten.
Wenn Sie diese stty-Option setzen, dann wird der Hintergrundauftrag
gestoppt, wenn er versucht, auf das Terminal auszugeben.
Sie haben mehrere Möglichkeiten, auf die Aufträge zuzugreifen. Sie
können über die Prozeßnummer eines Prozesses des Auftrages oder mit
einem der folgenden Ausdrücke zugreifen:
%nummer
Der Auftrag mit der gegebenen Auftrags-nummer.
%zeichenkette
Jeder Auftrag, dessen Kommando-Zeile mit zeichenkette beginnt.
%?zeichenkette
Jeder Auftrag, dessen Kommando-Zeile zeichenkette enthält.
%% Der aktuelle Auftrag.
%+ Synonym für %%.
%- Der letzte Auftrag.
Die Korn-Shell registriert jeden Zustandswechsel eines Auftrags. Nor-
malerweise informiert sie Sie sofort, wenn ein Auftrag gestoppt wurde
und nicht weiter ausgeführt werden kann. Damit Ihre Arbeit nicht
gestört wird, wird diese Information vor der Ausgabe eines Bereitzei-
chens ausgegeben.
Wurde die monitor-Option eingeschaltet, dann löst jeder beendete Hin-
tergrundauftrag jeden für CHLD gesetzten trap aus.
Wenn Sie versuchen, die Korn-Shell zu verlassen, während im Hinter-
grund Aufträge laufen oder gestoppt sind, dann werden Sie gewarnt: You
have stopped (running) jobs.
Sie können dann das Kommando jobs benutzen, um sich eine Übersicht der
augenblicklichen Situation zu verschaffen. Wenn Sie dies getan haben,
oder unmittelbar nach dem ersten Versuch ein zweites Mal die Korn-
Shell verlassen möchten, werden Sie kein zweites Mal gewarnt und die
gestoppten Aufträge werden beendet.
Seite 34 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
Signale
Die Signale INT und QUIT werden für ein aufgerufenes Hintergrund-Kom-
mando (&) ignoriert, wenn die Option monitor der Auftragssteuerung
nicht aktiv ist. Sonst haben die Signale die Werte, die von der Korn-
Shell von ihrem Vaterprozeß geerbt wurden. (Lesen Sie dazu auch beim
eingebauten Kommando trap nach.)
Ausführung
Jedesmal, wenn ein Kommando ausgeführt wird, werden die bereits
beschriebenen Ersetzungen in dieser Reihenfolge durchgeführt:
- Entwertung
- Parameter-Ersetzung
- Tilde-Ersetzung
- Alias-Ersetzung
- Dateinamen-Erzeugung
- Ein- und Ausgabeumlenkung
- Kommandoersetzung
Entspricht der Kommandoname dem Namen eines eingebauten Kommandos,
dann wird dieses in der aktuellen Korn-Shell ausgeführt. Als nächstes
wird geprüft, ob der Kommandoname dem Namen einer benutzerdefinierten
Funktion entspricht. Ist dies der Fall, dann werden die Stellungspara-
meter gesichert und auf die Werte der Argumente des Funktionsaufrufs
gesetzt. Wenn die Funktion beendet ist oder das eingebaute Kommando
return ausgeführt wurde, werden die Stellungsparameter wiederherge-
stellt und jeder in der Funktion für EXIT gesetzte trap ausgeführt.
Der Exit-Wert ist der Wert des letzten Kommandos in der Funktion. Eine
Funktion wird auch in der aktuellen Korn-Shell ausgeführt. Ist ein
Kommandoname nicht unter den eingebauten Kommandos oder den benutzer-
definierten Funktionen zu finden, dann wird ein Prozeß erzeugt und
versucht, das Kommando durch den Systemaufruf exec ausführen zu las-
sen.
Die Variable PATH definiert den Suchpfad für die Verzeichnisse mit den
Kommandos. Die einzelnen Verzeichnisse werden durch Doppelpunkt :
getrennt. Der Standard-Suchpfad ist /usr/bin:. Damit sind, in dieser
Reihenfolge, das Verzeichnis /usr/bin und das aktuelle Verzeichnis
gemeint. Das aktuelle Verzeichnis kann durch einen Doppelpunkt am
Anfang oder Ende oder durch zwei (oder mehr) aufeinanderfolgende Dop-
pelpunkte angegeben werden. Der Suchpfad wird nicht benutzt, wenn der
Kommandoname einen Schrägstrich / enthält. Ohne / im Kommandonamen
wird jedes Verzeichnis im Suchpfad nach einer ausführbaren Datei
durchsucht. Existiert für die Datei das Ausführrecht und ist sie eine
Seite 35 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
einfache Datei ohne das a.out-Format, dann wird angenommen, daß sie
eine Shell-Prozedur enthält. In diesem Fall wird eine Subshell zum
Lesen der Datei aufgerufen. Alle nicht exportierten Alias-Variablen,
Funktionen und Umgebungsvariablen werden nicht in die Subshell
kopiert. Ein geklammertes Kommando wird in einer Subshell ohne
Löschung der nicht exportierten Teile ausgeführt.
KOMMANDO-BEARBEITUNG
Kommando-Wiederaufruf
Der Text der letzten HISTSIZE-Kommandos, die an einem Terminal einge-
geben wurden, wird in einer History-Datei gespeichert. Der Standard-
wert für HISTSIZE ist 128. Wenn die Variable HISTFILE nicht gesetzt
oder die durch den Wert angegebene Datei nicht schreibbar ist, wird
die Datei $HOME/.shhistory zur Speicherung benutzt. Eine Korn-Shell
kann auf alle Kommandos von interaktiven Korn-Shells zugreifen, welche
die gleiche History-Datei benutzen. Das eingebaute Kommando fc können
Sie zum Auflisten oder Editieren eines Bereiches dieser Datei benutzt.
Der Dateibereich, der angesprochen wird, kann durch eine Zahl, den
ersten Buchstaben des Kommandos oder eine Zeichenkette aus dem Kom-
mando angesprochen werden. Der Bereich kann aus einem oder mehreren
Kommandos bestehen. Wenn Sie keinen Editor durch ein Argument beim
Aufruf von fc definieren, dann wird der Wert der Variablen FCEDIT ver-
wendet. Ist FCEDIT nicht definiert, dann wird /usr/bin/ed benutzt. Die
editierten Kommandos werden ausgegeben und nach Verlassen des Editors
wieder ausgeführt.
Durch Angabe von -s kann die Editierphase übersprungen werden. In die-
sem Fall kann eine Variable der Form alt=neu zur Änderung des Komman-
dos vor der Ausführung benutzt werden. Wenn Sie z. B. fc -s
unsinn=sinn c eingeben, dann wird das letzte Kommando, das mit dem
Zeichen c begann, ausgeführt. Zuvor wird aber das erste Auftreten von
unsinn im Kommando durch sinn ersetzt.
Option des Zeileneditors
Normalerweise tippen Sie jede Kommandozeile auf dem Bildschirm ein und
schließen sie durch ein Neue-Zeile-Zeichen ab. Ist die Option emacs,
gmacs oder vi aktiv (siehe set unten), dann können Sie die Kommando-
zeile editieren.
Diese Editieroption wird automatisch gesetzt, wenn eine der Variablen
EDITOR oder VISUAL ein Wert zugewiesen wird, der auf emacs, gmacs oder
vi endet.
Die Editiermöglichkeit fordert von dem Terminal:
- Der Wagenrücklauf (return) kann ohne Zeilenvorschub (line feed)
verwendet werden.
- Das Leerzeichen ( ) überschreibt das vorhandene Zeichen am Bild-
schirm.
Seite 36 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
Benutzer mit ADM-Terminals sollten den "space-advance"-Schalter auf
"space" schalten. Die Schalterstellung eines Hewlett-Packard-Terminals
der Serie 2621 sollte "bcGHxZ etX" sein.
Der Editiermodus ist so implementiert, daß Sie wie durch ein Fenster
auf die aktuelle Zeile schauen. Die Breite des Fensters wird, falls
definiert, durch den Wert der Variablen COLUMNS bestimmt, sonst ist
das Fenster 80 Zeichen breit. Ist die Zeile breiter als die Fenster-
breite minus zwei, dann werden Sie durch eine Markierung am Fenster-
rand darauf aufmerksam gemacht. Bewegen Sie die Schreibmarke an den
Rand, wird das Fenster um diese Position zentriert dargestellt.
Als Markierung werden verwendet:
> wenn die Zeile rechts zu lang ist
< wenn die Zeile links zu lang ist
* wenn die Zeile links und rechts zu lang ist
Das Such-Kommando hat in jedem Editiermodus Zugriff auf die History-
Datei. Zum Suchen werden nur Zeichenketten, keine Muster, verwendet.
Die einzige Ausnahme: Der Zirkumflex ^ als erstes Zeichen in der Zei-
chenkette bindet an das erste Zeichen in der Zeile.
emacs-Editiermodus
Dieser Modus wird durch Aktivierung der Option emacs oder gmacs aufge-
rufen. Der einzige Unterschied zwischen diesen beiden Modi besteht in
der Behandlung des ^T. Beim Editieren bewegt der Benutzer den Cursor
an die Stelle, wo etwas geändert werden soll, und fügt dort je nach
Bedarf Zeichen oder Wörter ein oder löscht diese. Alle Editierkomman-
dos sind Steuerzeichen oder Escape-Folgen. Die Notation für Steuerzei-
chen ist der Zirkumflex (^) mit einem anschließenden Zeichen. Z. B.
ist ^F die Notation für <CTRL-f>. Um dies einzugeben, hält man die
"CTRL"-Taste (Control-Taste) nieder und betätigt die Taste "f". Die
"SHIFT"-Taste wird nicht betätigt. (Die Notation ^? bedeutet die DEL-
Taste (Löschtaste).)
Die Notation für Escape-Folgen ist M- mit einem abschließenden Zei-
chen. Z. B. wird M-f (ausgesprochen Meta-f) durch Betätigung von ESC
(ASCII \033) und anschließend "f" eingegeben. (M-F wäre die Notation
für ESC mit anschließendem "SHIFT-F" (großes "F").)
Alle Editierkommandos können an beliebiger Stelle in der Zeile einge-
geben werden (nur nicht am Anfang). Zum Abschluß von Editierkommandos
wird weder "RETURN" noch "LINEFEED" eingegeben, außer wenn dies aus-
drücklich angegeben ist.
Seite 37 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
^F Cursor um eine Stelle vorwärts (nach rechts) bewegen.
M-f Cursor um ein Wort vorwärts bewegen. (Der emacs-Editor versteht
unter einem Wort eine nur aus Buchstaben, Ziffern und Unterstri-
chen bestehende Zeichenfolge.)
^B Cursor um eine Stelle rückwärts (nach links) bewegen.
M-b Cursor um ein Wort rückwärts bewegen.
^A Cursor an den Zeilenanfang bewegen.
^E Cursor an das Zeilenende bewegen.
^]char
Cursor vorwärts zum Zeichen char in der aktuellen Zeile bewegen.
M-^]char
Cursor rückwärts zum Zeichen char in der aktuellen Zeile bewegen.
^X^X Cursor und Marke austauschen.
erase
(Benutzerdefiniertes Löschzeichen, das vom Kommando stty(1) defi-
niert wird, normalerweise ^H oder #.) Löscht das vorangehende
Zeichen.
^D Aktuelles Zeichen löschen.
M-d Aktuelles Wort löschen.
M-^H (Meta-Backspace) Vorangehendes Wort löschen.
M-h Vorangehendes Wort löschen.
M-^? (Meta-DEL) Vorangehendes Wort löschen (falls das Unterbrechungs-
zeichen ^? ist (DEL, der Standardwert), funktioniert dieses Kom-
mando nicht).
^T Im emacs-Modus das aktuelle Zeichen mit dem nächsten Zeichen aus-
tauschen. Im gmacs-Modus die beiden vorangehenden Zeichen austau-
schen.
^C Aktuelles Zeichen in einen Großbuchstaben umwandeln.
M-c Aktuelles Wort in Großbuchstaben umwandeln.
M-l Aktuelles Wort in Kleinbuchstaben umwandeln.
Seite 38 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
^K Löschen vom Cursor bis zum Ende der Zeile. Wenn ein numerischer
Parameter vorausgeht, dessen Wert kleiner ist als die aktuelle
Cursorposition, von der angegebenen Position bis zum Cursor
löschen. Wenn ein numerischer Parameter vorangeht, dessen Wert
größer ist als die aktuelle Cursorposition, vom Cursor bis zur
angegebenen Position löschen.
^W Löschen vom Cursor bis zur Marke.
M-p Den Bereich vom Cursor bis zur Marke auf den Stack legen.
kill (Benutzerdefiniertes Löschzeichen, das im stty-Kommando definiert
ist, normalerweise ^G oder @.) Löscht die komplette aktuelle
Zeile. Wenn zwei kill-Zeichen nacheinander eingegeben werden,
bewirken alle danach eingegebenen Kill-Zeichen einen Zeilenvor-
schub.
^Y Letzte Löschung rückgängig machen (in die Zeile zurückholen).
^L Zeilenvorschub und aktuelle Zeile ausgeben.
^@ (Null-Zeichen) Marke setzen.
M-space
(Meta-Leerzeichen) Marke setzen.
^J (Neue Zeile) Aktuelle Zeile ausführen.
^M (Return) Aktuelle Zeile ausführen.
eof Dateiendezeichen, normalerweise ^D. Wird nur dann als Dateiende
verarbeitet, wenn die aktuelle Zeile leer ist.
^P Vorangehendes Kommando zurückholen. Bei jeder wiederholten Ein-
gabe von ^P wird das jeweils zeitlich vorangehende Kommando auf-
gerufen. Springt um eine Zeile zurück, wenn man derzeit nicht in
der ersten Zeile eines mehrzeiligen Kommandos steht.
M-< Die älteste Protollzeile zurückholen.
M-> Die jüngste Protokollzeile zurückholen.
^N Die nächste Kommandozeile holen. Jedesmal wenn ^N eingegeben
wird, wird auf die zeitlich nächstfolgende Kommandozeile zuge-
griffen.
^Rstring
Kommandoprotokoll in Rückwärtsrichtung nach einer vorangehenden
Kommandozeile durchsuchen, die die Zeichenfolge string enthält.
Wenn der Parameter Null angegeben ist, erfolgt die Suche in Vor-
wärtsrichtung. Die Zeichenfolge string wird mit einem "RETURN"
oder "NEWLINE" abgeschlossen. Wenn vor der Zeichenfolge ein ^
Seite 39 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
steht, muß die gefundene Zeile mit der Zeichenfolge string begin-
nen. Wenn string weggelassen wird, wird die nächste Kommando-
zeile, die die zuletzt gesuchte Zeichenfolge string enthält, auf-
gegriffen. In diesem Fall kehrt der Parameter Null die Suchrich-
tung um.
^O Die aktuelle Zeile ausführen und die nächste Zeile relativ zur
aktuellen Zeile aus der Protokolldatei holen.
M-digits
(Escape) Numerischen Parameter definieren, wobei die Ziffern als
Parameter für das nächste Kommando genommen werden. Die folgenden
Kommandos können einen Parameter haben: ^F, ^B, erase, ^C, ^D,
^K, ^R, ^P, ^N, ^], M-., M-^], M-, M-b, M-c, M-d, M-f, M-h, M-l
und M-^H.
M-letter
Softkey - Die Aliasliste wird nach einem Alias unter dem Namen
letter durchsucht, und wenn ein Alias mit diesem Namen definiert
ist, wird sein Wert in die Eingabewarteschlange eingereiht. Der
Buchstabe letter darf keine der obigen Metafunktionen sein.
M-]letter
Softkey - Die Aliasliste wird nach einem Alias unter dem Namen
letter durchsucht, und wenn ein Alias mit diesem Namen defi-
niert ist, wird sein Wert in die Eingabewarteschlange eingereiht.
Hiermit können auf zahlreichen Datenstationen Funktionstasten
programmiert werden.
M-. Das letzte Wort des vorangehenden Kommandos wird in die Zeile
eingefügt. Wenn ein numerischer Parameter vorangeht, zeigt dieser
auf das einzufügende Wort, das dann also nicht das letzte Wort
ist.
M- Dasselbe wie M-..
M-* Eine Dateinamensgenerierung mit dem aktuellen Wort versuchen. Ein
Stern wird angefügt, wenn das Wort mit keiner Datei übereinstimmt
oder keine speziellen Musterzeichen enthält.
M-ESC
Dateinamensergänzung. Ersetzt das aktuelle Wort durch das längste
gemeinsame Präfix aller Dateinamen, die mit dem aktuellen Wort
übereinstimmen, wenn an dieses ein Stern angehängt wird. Wenn die
Übereinstimmung eindeutig ist, wird ein / angefügt, falls die
Datei ein Verzeichnis ist, und ein Leerzeichen wird angefügt,
wenn die Datei kein Verzeichnis ist.
M-= Die Dateien auflisten, die mit dem Muster des aktuellen Wortes
übereinstimmen, wenn an dies ein Stern angehängt wird.
^U Den Parameter des nächsten Kommandos mit 4 multiplizieren.
Seite 40 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
\ Das nächste Zeichen umdeuten. Editierzeichen, das Zeichenlösch-,
Zeilenlösch- und Unterbrechungszeichen (normalerweise ^?) des
Benutzers können in eine Kommandozeile oder Suchzeichenfolge ein-
gegeben werden, wenn ihnen ein \ vorangestellt wird. Der \ hebt
die Editierfunktion des nächsten Zeichen auf (falls es eine sol-
che Funktion hat).
^V Version der Shell anzeigen.
M-# Fügt ein # am Anfang der Zeile ein und führt sie aus. Dadurch
wird ein Kommentar in die Protokolldatei eingefügt.
vi-Editiermodus
Es gibt zwei Modi bei der Eingabe:
- Wenn Sie ein Kommando eingeben, befinden Sie sich im Eingabemodus.
- Durch Drücken der Taste <ESCAPE> wechseln Sie in den Kommandomodus.
Im Kommandomodus können Sie dann editieren, also die Schreibmarke
bewegen oder Zeichen löschen und einfügen. Die meisten Anweisungen
können, wie beim vi, mit Wiederholungsfaktoren versehen werden.
Wenn Sie sich im vi-Modus befinden, ist bei den meisten Systemen der
Eingabemodus die Standardeinstellung. <ESCAPE> schaltet den Eingabemo-
dus ab, so daß Sie die Kommandozeile ändern können. Dieses Schema ver-
bindet die Vorteile des Eingabemodus als Standardeinstellung mit dem
Echo des Raw-Modus beim Voraustippen.
Eingabeanweisungen
Standardmäßig befindet sich der Editor im Eingabemodus.
<BACKSPACE>
(<BACKSPACE> steht für das mit dem Kommando stty definierte
erase-Zeichen.) Löscht das Zeichen vor der Schreibmarke.
<CTRL-W>
Löscht das vorherige, durch ein Leerzeichen getrennte Wort.
<CTRL-D>
Beendet die Korn-Shell, falls die Option ignoreeof (siehe set
unten) nicht eingeschaltet ist.
<CTRL-V>
Entwertet das nächste Zeichen. Sie können Editier-Zeichen und
erase- und kill-Zeichen in eine Kommandozeile oder in eine Such-
Zeichenkette einfügen, wenn Sie davor <CTRL-V> tippen. <CTRL-V>
entwertet für den Editor die Bedeutung des nächsten Zeichens.
\ Entwertet das nächste erase- oder kill-Zeichen.
Seite 41 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
Positionieranweisungen
Diese Anweisungen bewegen die Schreibmarke.
[zahl]l
Geht ein (zahl) Zeichen vorwärts (nach rechts).
[zahl]w
Geht ein (zahl) Wort (alphanumerische Zeichen) vorwärts (nach
rechts).
[zahl]W
Geht an den Anfang des nächsten (zahl-ten) Wortes, das nach Blank
kommt.
[zahl]e
Geht an das Ende des (zahl-ten) Wortes.
[zahl]E
Geht an das Ende des durch ein Leerzeichen getrennten (zahl-ten)
Wortes.
[zahl]h
Geht ein (zahl) Zeichen zurück (nach links).
[zahl]b
Geht ein (zahl) Wort zurück (nach links).
[zahl]B
Geht an den Anfang des nächsten (zahl-ten) Wortes, das nach einem
Leerzeichen kommt.
[zahl]|
Geht auf die Spalte zahl.
[zahl]fzeichen
Sucht das nächste (zahl-te) zeichen in der aktuellen Zeile.
[zahl]Fzeichen
Sucht rückwärts das nächste (zahl-te) zeichen in der aktuellen
Zeile.
[zahl]tzeichen
Entspricht f gefolgt von h.
[zahl]Tzeichen
Entspricht F gefolgt von l.
Seite 42 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
[zahl];
Wiederholt (zahl-mal) die letzte Einzelzeichen-Suchanweisung mit
f, F, t oder T.
[zahl],
Wiederholt in entgegengesetzter Richtung (zahl-mal) die letzte
Einzelzeichen-Suchanweisung.
0 Geht an den Zeilenanfang.
^ Geht auf das erste sichtbare (von Leerzeichen verschiedene) Zei-
chen der Zeile.
$ Geht an das Zeilenende.
Suchanweisungen
Diese Anweisungen greifen auf Ihre History-Datei zu.
[zahl]k
Holt das letzte Kommando. Durch jedes eingegebene k wird ein
älteres Kommando geholt.
[zahl]-
Entspricht k.
[zahl]j
Holt das nächste Kommando. Durch jedes eingegebene j wird ein
neueres Kommando geholt.
[zahl]+
Entspricht j.
[zahl]G
Auf das Kommando mit der Nummer zahl wird zugegriffen. Standard-
mäßig wird auf das älteste eingegebene Kommando zugegriffen.
/zeichenkette
Sucht rückwärts durch die History-Datei nach einem älteren Kom-
mando, das zeichenkette enthält. zeichenkette wird durch das
Neue-Zeile-Zeichen abgeschlossen. Ist Zirkumflex ^ dem ersten
Zeichen von zeichenkette vorangestellt, dann muß am Anfang der
Zeile zeichenkette stehen. Ist zeichenkette leer, wird die letzte
zeichenkette verwendet.
?zeichenkette
Entspricht / mit Vorwärtssuche.
n Sucht die nächste passende Zeile für die letzte Such-Zeichen-
kette.
Seite 43 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
N Sucht in umgekehrter Richtung die nächste passende Zeile für die
letzte Such-Zeichenkette. Durchsucht die History-Datei nach zei-
chenkette der letzten /-Anweisung.
Anweisungen zur Textmodifikation
Diese Anweisungen ändern die Kommandozeile.
a Geht in den Eingabemodus und fügt den Text nach dem aktuellen
Zeichen an.
A Entspricht $a, der Text wird ans Zeilenende angefügt.
[zahl]cpositionierung
c[zahl]positionierung
Ab dem aktuellen Zeichen werden alle Zeichen bis zu dem Zeichen,
das durch positionierung erreicht werden kann, gelöscht und dann
in den Eingabemodus umgeschaltet. Ist positionierung c, dann wird
die ganze Zeile gelöscht und in den Eingabemodus umgeschaltet.
C Ab dem aktuellen Zeichen wird bis zum Zeilenende gelöscht und in
den Eingabemodus gewechselt.
S Entspricht cc.
D Ab dem aktuellen Zeichen wird bis zum Zeilenende gelöscht, ent-
spricht d$.
[zahl]dpositionierung
d[zahl]positionierung
Ab dem aktuellen Zeichen werden alle Zeichen bis zu dem Zeichen,
das durch positionierung erreicht werden kann, gelöscht. Ist
positionierung c, dann wird die ganze Zeile gelöscht.
i Geht in den Eingabemodus und fügt den Text vor dem aktuellen Zei-
chen ein.
I Entspricht 0i, der Text wird am Zeilenanfang eingefügt.
[zahl]P
Wiederholt die letzte Textänderung (zahl-mal) vor dem aktuellen
Zeichen.
[zahl]p
Wiederholt die letzte Textänderung (zahl-mal) nach dem aktuellen
Zeichen.
R Geht in den Eingabemodus und überschreibt den alten Text ab dem
aktuellen Zeichen.
Seite 44 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
[zahl]rzeichen
Ersetzt das (die nächsten zahl) Zeichen ab dem aktuellen Zeichen
durch zeichen und bewegt die Schreibmarke auf das letzte geän-
derte Zeichen.
[zahl]x
Löscht das aktuelle Zeichen (und zahl minus 1 Zeichen danach).
[zahl]X
Löscht das (zahl) Zeichen vor dem aktuellen Zeichen.
[zahl].
Wiederholt die letzte Textänderungs-Anweisung (zahl-mal).
[zahl]~
Invertiert die Groß-/Kleinschreibung von zahl Zeichen ab dem
aktuellen Zeichen und bewegt die Schreibmarke entsprechend zahl
mit.
[zahl]
Fügt das letzte bzw. zahl-te Wort der vorhergehenden Anweisung an
und geht dann in den Eingabemodus.
* Mit dem aktuellen Wort wird durch Anfügen eines Sterns versucht,
eine Dateinamen-Erzeugung durchzuführen. Wird keine Datei gefun-
den, dann ertönt ein akustisches Signal. Ansonsten wird Wort
durch den gefundenen Dateinamen ersetzt und in den Eingabemodus
gewechselt.
\ Ergänzung von Dateinamen: ersetzt das aktuelle Wort durch den
längsten gemeinsamen Präfix von allen Dateinamen, die durch die
Dateinamen-Erzeugung mit dem aktuellen Wort und angefügten Stern
hervorgehen. Ist die Ergänzung eindeutig, wird bei einem Ver-
zeichnis ein Schrägstrich /, sonst ein Leerzeichen angefügt.
Sonstige Editieranweisungen
[zahl]ypositionierung
y[zahl]positionierung
Ab dem aktuellen Zeichen wird der aktuelle Text bis zu dem Zei-
chen, das durch positionierung erreicht werden kann, im Löschpuf-
fer gespeichert. Der Text und die Schreibmarke bleiben unverän-
dert.
Y Ab dem aktuellen Zeichen wird der aktuelle Text bis zum Zeilen-
ende im Löschpuffer gespeichert. Entspricht y$.
u Die letzte Änderungsanweisung wird rückgängig gemacht.
U Alle Änderungen an der Kommandozeile werden rückgängig gemacht.
Seite 45 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
[zahl]v
Liest aus der History-Datei zahl Zeilen in den Eingabepuffer mit
Hilfe des Kommandos
fc -e ${VISUAL:-$(EDITOR:-vi}} zahl
Fehlt zahl, dann wird die aktuelle Zeile genommen.
<CTRL-L>
Zeilenvorschub ausgeben und aktuelle Zeile drucken. Wirkt nur im
Kommandomodus.
<CTRL-J>
(Neue-Zeile-Zeichen) Aktuelle Zeile unabhängig vom momentanen
Modus ausführen.
<CTRL-M>
(Wagenrücklauf) Aktuelle Zeile unabhängig vom momentanen Modus
ausführen.
# Schließt die Zeile ab, nachdem ihr ein Nummernzeichen # vorange-
stellt wurde. Damit können Sie eine Zeile in die History-Datei
einfügen, die nicht ausgeführt wird.
= Zeigt alle Dateinamen, auf die das aktuelle Wort mit angefügtem
Stern als Muster paßt.
@buchstabe
Durchsucht Ihre Alias-Tabelle nach einer Variablen mit dem Namen
buchstabe und nimmt, bei Erfolg, den Wert als Eingabe.
Eingebaute Kommandos
Die folgenden einfachen Kommandos werden in der Korn-Shell selbst aus-
geführt. Ein- und Ausgabeumlenkung ist dabei erlaubt. Falls nicht
anders angegeben wird die Ausgabe auf die Standardausgabe geschrieben;
der Endestatus ist 0, wenn kein Syntaxfehler erkannt wurde.
Kommandos, denen in der Beschreibung + oder ++ vorangestellt sind,
werden, wie nachfolgend beschrieben, anders behandelt:
- Dem Komandonamen vorangestellte Variablenwertzuweisungen bleiben
aktiv, wenn das Kommando beendet ist.
- Ein- und Ausgabeumlenkungen werden nach den Variablenwertzuweisun-
gen bearbeitet.
- Fehler in einer Prozedur brechen die Ausführung der Prozedur ab.
- Nur ++: Hat ein Wort das Format der Variablenwertzuweisung
name=wert, dann wird wert wie bei normalen Wertzuweisungen ersetzt.
Seite 46 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
D. h. Tilde-Ersetzung wird nach dem Gleichheitszeichen = durchge-
führt, Dateinamen-Erzeugung und Worttrennung (durch Blank-
Ersetzung) jedoch nicht.
Die Kommandos mit + sind:
Doppelpunkt :, Punkt ., break, continue, eval, exec, exit, newgrp,
return, shift, times, trap, wait.
Die Kommandos mit ++ sind:
alias, export, readonly, typeset.
+: [argument ...]
Dieses Kommando führt nur Parameterersatz auf argument durch.
+. datei [argument ...]
Liest die komplette datei und führt dann die Kommandos in der
Umgebung der aktuellen Korn-Shell aus. Der Suchpfad PATH wird zum
Suchen des Verzeichnisses mit datei benutzt.
Falls Sie argumente angegeben, dann werden diese zu den Stel-
lungsparametern, sonst bleiben die alten erhalten. Der Endstatus
ist der Endestatus des letzten ausgeführten Kommandos.
[ Bedingungen prüfen, siehe test(1).
++alias [-t] [name]
alias ohne Argumente schreibt die Alias-Tabelle in der Form
name=wert auf die Standardausgabe.
-t Wird zum Setzen und Auflisten von mit Pfad versehenen Alias-
Variablen (tracked alias) verwendet. Der wert einer solchen
Variablen besteht aus dem vollen Pfadnamen, der zu name
führt. Durch Ändern des Wertes von PATH wird wert undefi-
niert, name bleibt aber mit Pfad. Bei fehlender Option -t
wird für jeden Namen ohne Wert in der Argumentliste das Paar
name=wert ausgegeben.
++alias [-x] [name=[wert]] ...
Ein Leerzeichen am Ende von wert bedeutet, daß bei der Kommando-
abarbeitung auch das nächste Wort in der Kommandozeile auf
Alias-Ersetzung überprüft wird.
-x Wird zum Setzen und Ausgeben von exportierten Alias-Variablen
verwendet. Eine exportierte Alias-Variable ist für Prozeduren
definiert, die mit ihrem Namen aufgerufen werden.
Der Endestatus ist ungleich 0, wenn für name kein wert definiert
ist.
Seite 47 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
bg [job ...]
Jeder der angegebenen Aufträge wird in den Hintergrund geschickt.
Der letzte gestoppte Auftrag wird in den Hintergrund geschickt,
wenn job nicht angegeben ist. Der Abschnitt Aufträge oben enthält
eine Beschreibung des Formats von job.
+break [zahl]
Bricht die umschließende for-, while-, until- oder select-
Schleife ab. Ist zahl angegeben, wird in der zahlten umschließen-
den Schleife mit der Ausführung fortgefahren. Ist zahl gleich 0,
wird die äußerste Schleife verlassen. break 1 entspricht break.
+continue [zahl]
Fährt mit der nächsten Iteration der umschließenden for-, while-,
until- oder select-Schleife fort. Ist zahl angegeben, wird in der
zahlten umschließenden Schleife mit der nächsten Iteration fort-
gefahren. Ist zahl gleich 0, wird hinter der äußersten Schleife
fortgefahren. continue 1 entspricht continue.
cd [dir] Format 1
cd diralt dirneu Format 2
Format 1: Verzeichnis mit CDPATH wechseln
cd wechselt das aktuelle Verzeichnis nach dir. Haben Sie das
Minuszeichen - für dir angegeben, wechselt cd zum vorhergehenden
Verzeichnis zurück. Die Variable PWD erhält als Wert das aktuelle
Verzeichnis, OLDPWD den alten Wert von PWD zugewiesen. Die Varia-
ble CDPATH definiert den Suchpfad für Verzeichnisse, also Namen
von Verzeichnissen, von denen eines dir enthält.
Die Namen der einzelnen Verzeichnisse in CDPATH werden, wie bei
PATH, durch Doppelpunkt : getrennt. Der Standard-Suchpfad ist
leer, dies entspricht dem aktuellen Verzeichnis. Beachten Sie,
daß das aktuelle Verzeichnis durch die leere Zeichenkette darge-
stellt wird und an beliebiger Stelle von CDPATH, also auch nach
dem Gleichheitszeichen, stehen kann. Beginnt dir mit einem
Schrägstrich /, dann wird der Suchpfad nicht benutzt, sonst wird
jedes Verzeichnis des Suchpfads in der Reihenfolge der Angabe
nach dir durchsucht.
Format 2: Verzeichniswechsel mit Textersetzung
cd ersetzt die Zeichenkette diralt durch dirneu im Namen des
aktuellen Verzeichnisses (PWD) und versucht, in dieses neue Ver-
zeichnis zu wechseln.
command [-p] kommandoname [argument ...] Format 1
command [-v| -V] kommandoname Format 2
Lesen Sie die Beschreibung des Kommandos command(1).
Seite 48 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
echo [argument ...]
Lesen Sie die Beschreibung des Kommandos echo(1).
+eval [argument ...]
Die Argumente werden als Eingabe der Korn-Shell gelesen und das
oder die daraus entstehenden Kommandos ausgeführt. Auf diese
Weise werden die Argumente zweimal von der Korn-Shell bewertet.
+exec [programm [umlenkung ...]] Format 1
exec [umlenkung ...] Format 2
Format 1: Korn-Shell überlagern
Rufen Sie exec mit programm auf, dann wird das durch die hier
angegebenen Argumente beschriebene Kommando anstelle der aktuel-
len Korn-Shell ausgeführt, ohne einen neuen Prozeß zu erzeugen.
Ein- und Ausgabenumlenkung können Sie dabei angeben, sie werden
von der aktuellen Korn-Shell vorgenommen und gelten dann für das
Kommando.
Format 2: Ein- bzw. Ausgabe umlenken
Haben Sie exec mit umlenkung aufgerufen, dann werden Ein- bzw.
Ausgabe umgelenkt, wie es im Abschnitt Ein-/Ausgabeumlenkung oben
beschrieben ist. In diesem Fall wird jede durch diesen Aufruf
geöffnete Dateikennzahl, die größer als 2 ist, beim Aufruf eines
anderen Programms geschlossen.
+exit [zahl]
Dieses Kommando beendet die Korn-Shell mit dem Endestatus zahl.
Haben sie zahl nicht angegeben, wird der Endestatus des letzten
ausgeführten Kommandos verwendet. Dateiende ist für die Korn-
Shell gleichbedeutend mit exit, falls nicht die Option ignoreeof
(siehe set unten) gesetzt ist.
++export [name=[wert]] ... Format 1
export [-p] Format 2
Die angegebenen Namen werden markiert, so daß sie in eine neue
Umgebung exportiert werden.
Wenn Sie export ohne Argumente aufrufen, werden alle zu exportie-
renden Variablen auf die Standardausgabe geschrieben. -p erzeugt
ein portierbares Format mit Export-Anweisungen, das zur Sicherung
und Wiederherstellung eines bestimmten Zustands verwendet werden
kann.
false
Siehe let 0 bzw. Kommando false(1).
fc [-e editor] [-lnr] [--] [erstes [letztes]] Format 1
fc [-s] [--] [alt=neu] [kommando] Format 2
Seite 49 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
Format 1: Kommandos aus der History-Datei editieren
Aus den letzten HISTSIZE-Kommandos, die auf dem Terminal eingege-
ben wurden, wird der Bereich von erstes bis letztes Kommando zum
Editieren und anschließenden Ausführen ausgewählt. Die Argumente
erstes und letztes können Sie als Zahl oder als Zeichenkette
angeben.
Eine positive Zahl steht für die Nummer des Kommandos. Eine nega-
tive Zahl wird als Differenz zur Nummer des aktuellen Kommandos
interpretiert.
Eine Zeichenkette wird dazu benutzt, das zuletzt ausgeführte Kom-
mando, das mit dieser Zeichenkette beginnt, auszuwählen. Ist
letztes nicht angegeben, wird es auf erstes gesetzt. Ist erstes
auch nicht gegeben, wird standardmäßig das letzte Kommando zum
Editieren und -16 zum Auflisten genommen.
-e editor
Durch editor wird der zu benutzende Editor bezeichnet. Fehlt
diese Angabe, wird der Wert der Variablen FCEDIT als Editor
verwendet.
Ist FCEDIT nicht gesetzt, dann wird standardmäßig
/usr/bin/ed eingesetzt.
-l Die Kommandos werden nur auf die Standardausgabe geschrieben
und können nicht editiert und ausgeführt werden. -l kann
nicht zusammen mit -e verwendet werden.
-n Die Nummern der Kommandos werden beim Schreiben durch die
Option -l unterdrückt.
-r Die Kommandos werden in umgekehrter Reihenfolge zur Verfü-
gung gestellt.
-- Ende der Optionenliste. Die Angabe ist nötig, wenn das erste
Argument mit - beginnt.
Format 2: Kommando wieder ausführen
Nach der Ersetzung der Zeichenkette alt durch neu wird das Kom-
mando erneut ausgeführt.
-s Die Kommandos werden ausgeführt, ohne vorher einen Editor
aufzurufen.
fg [job ...]
Jeder der angegebenen Aufträge wird in den Vordergrund gebracht.
Der Auftrag, der als letzter gestoppt bzw. in den Hintergrund
geschickt wurde, wird in den Vordergrund gebracht, wenn job nicht
angegeben ist. Der Abschnitt Aufträge oben enthält eine
Seite 50 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
Beschreibung des Formats von job.
getopts optstring name [arg ...]
getopts überprüft arg auf legale Optionen. Fehlt argument, werden
die Stellungsparameter verwendet. Eine Option beginnt grundsätz-
lich mit einem Plus- oder Minuszeichen. Eine Option, die nicht
mit + oder - beginnt, oder das Argument -- schließen die Optionen
ab. In optstring sind die Buchstaben enthalten, die getopts als
Optionen erkennen soll. Folgt auf einen Buchstaben ein Doppel-
punkt :, dann wird angenommen, daß die Option ein Argument hat.
Die Optionen können von den Argumenten durch Blanks getrennt
sein.
Jedesmal, wenn getopts aufgerufen wird, weist es den erkannten
Options-Buchstaben der Variablen name als Wert zu. Dem zugewiese-
nen Buchstaben wird ein Pluszeichen vorangestellt, wenn die
Option mit + begonnen hat. Der Index des nächsten Arguments wird
OPTIND zugewiesen. Falls ein Options-Argument existiert, wird es
OPTARG zugewiesen.
Ist das erste Zeichen von optstring einen Doppelpunkt :, dann
reagiert getopts wie folgt auf Fehler, während es sonst eine Feh-
lermeldung ausgibt. Der Buchstabe einer falschen Option wird
OPTARG zugewiesen und dem Wert von name ein Fragezeichen ?, wenn
die Option unbekannt ist oder ein Doppelpunkt :, wenn eine erfor-
derliche Option fehlt. Der Endestatus ist ungleich 0, wenn keine
weiteren Optionen mehr existieren.
jobs [-lnp] [job ...]
Dieses Kommando gibt es nur auf Systemen mit Auftragssteuerung.
jobs schreibt auf die Standardausgabe Informationen (Reihenfolge,
Status und aufrufendes Kommando) zu den angegebenen Aufträgen
oder, falls job fehlt, zu allen aktiven Aufträgen.
-l Diese Option gibt zusätzlich noch die Prozeßnummern aus.
-n Nur die gestoppten und die seit dem letzten Aufruf von jobs
beendeten Aufträge werden ausgegeben.
-p Nur die Prozeßgruppe wird ausgegeben.
Der Abschnitt Aufträge oben enthält eine Beschreibung des Formats
von job.
kill [-s signal] job ... Format 1
kill -l [zahl] Format 2
Format 1: Signale an Prozesse senden
Schickt das Signal TERM oder das angegebene Signal signal an den
durch job bezeichneten Prozeß oder Auftrag. signal geben Sie als
Signalnamen an. Eine Liste der Signale finden Sie in der Datei
Seite 51 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
/usr/include/sys/signal.h - die Namen werden ohne die Vorsilbe
SIG benutzt. Das Signal CONT wird vorausgeschickt, wenn an einen
gestoppten Auftrag oder Prozeß die Signale TERM oder HUP
geschickt werden. Das Argument job kann die Prozeßnummer eines
Prozesses sein, der nicht Element eines aktiven Auftrags ist.
Der Abschnitt Aufträge oben enthält eine Beschreibung des Formats
von job.
Format 2: Signalnummern und -namen ausgeben
kill -l schreibt zeilenweise alle Signalnummern gefolgt von deren
Namen auf die Standardausgabe. Bei Angabe von zahl wird nur das
Signal mit der entsprechenden Signalnummer ausgegeben.
let ausdruck ...
Jedes Argument ist ein arithmetischer Ausdruck. Die berechneten
Ergebnisse werden ausgegeben. Der Endestatus ist 0, wenn der Wert
des letzten Ausdrucks ungleich 0 war, und 1 sonst.
login [benutzerkennung [umgebung ...]]
Lesen Sie die Beschreibung des Kommandos login(1).
+newgrp [-l] [--] [gruppe]
Entspricht exec /usr/bin/newgrp ... gruppe. newgrp macht die Num-
mer der angegebenen Gruppe zur aktuellen Gruppennummer und über-
lagert sich selbst mit einer Shell.
-l newgrp überlagert die aktuelle Shell mit einer Login-Shell.
-- Müssen Sie angeben, wenn gruppe mit - beginnt.
print [-Rnprsu[dateikennzahl]] [argument ...]
print ist der Ausgabemechanismus der Korn-Shell. Ohne Option oder
mit einer der Optionen - oder -- schreibt print auf die Standard-
ausgabe, wie es beim Kommando echo beschrieben ist.
-R oder -r
Im Raw-Modus werden alle Steuerzeichen von print ignoriert.
Die Option -R schreibt alle folgenden Optionen und Argumente
mit Ausnahme der Option -n.
-n An die Ausgabe wird kein Neue-Zeile-Zeichen angefügt.
-p Statt auf die Standardausgabe werden die Argumente auf die
Pipeline zu dem durch |& erzeugten Prozeß geschrieben.
-s Die Argumente werden in die History-Datei und nicht auf die
Standardausgabe geschrieben.
Seite 52 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
-udateikennzahl
Die einstellige dateikennzahl wird anstelle der Standardaus-
gabe zum Schreiben der Argumente verwendet.
pwd Siehe print -r - $PWD bzw. Kommando pwd(1).
read [-prs] [-u [dateikennzahl]] [--] [name?abfrage] [name ...]
read ist der Eingabemechanismus der Korn-Shell. read liest eine
Zeile von der Standardeingabe, zerlegt sie in Felder und weist
das erste Feld dem ersten namen, das zweite Feld dem zweiten
namen, usw. und den Rest dem letzten namen zu. Fehlt name, dann
wird REPLY standardmäßig als name verwendet.
Enthält das erste Argument ein Fragezeichen ?, wird bei interak-
tiver Korn-Shell der Rest des Wortes als ein Bereitzeichen auf
die Standardfehlerausgabe geschrieben. Der Endestatus ist 0, wenn
nicht auf Dateiende gestoßen wurde.
-r Der Gegenschrägstrich \ wird nicht als Sonderzeichen behan-
delt.
-p Statt von der Standardeingabe wird von der Pipeline zu dem,
durch |& erzeugten Prozeß gelesen. Bei Dateiende von der
Pipeline wird so bereinigt, daß durch |& ein neuer Prozeß
erzeugt werden kann.
-s Die Eingabe wird als Kommando in die History-Datei geschrie-
ben.
-u Die einstellige dateikennzahl wird statt der Standardeingabe
zum Lesen verwendet. Die Dateikennzahl kann mit dem einge-
bauten Kommando exec geöffnet werden. Der Standardwert für
dateikennzahl ist 0.
-- Ende der Optionenliste. Die Angabe ist nötig, wenn name mit
- beginnt.
++readonly [name=wert] [name ...] Format 1
readonly [-p] Format 2
Die angegebenen Variablen name werden als nur lesbar markiert.
Die Werte dieser Variablen können durch weitere Wertzuweisungen
nicht mehr verändert werden.
Wenn Sie readonly ohne Argumente aufrufen, werden alle readonly-
Variablen auf die Standardausgabe geschrieben. -p erzeugt ein
portierbares Format mit readonly-Anweisungen, das zur Sicherung
und Wiederherstellung eines bestimmten Zustands verwendet werden
kann.
Seite 53 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
+return [zahl]
In einer Funktion aufgerufen, kehrt dieses Kommando zur aufrufen-
den Prozedur zurück. Der return-Status wird durch zahl oder das
letzte ausgeführte Kommando bestimmt. Wird return außerhalb von
Funktionen oder in einer mit Punkt ausgeführten Prozedur aufgeru-
fen, dann entspricht dies dem Aufruf von exit.
set [option ...] [argument ...]
Mit set können Sie drei Dinge tun:
- Stellungsparameter setzen,
- Variablen auf die Standardausgabe schreiben oder
- Korn-Shell-Optionen setzen.
Den Stellungsparametern werden durch die Argumente argument neue
Werte zugewiesen, falls nicht die Option -A benutzt wird. Das
erste Argument geht an $1, das zweite an $2, usw.
Sind weder option noch argument angegeben, dann schreibt die
Korn-Shell die Namen und Werte aller Variablen auf die Standard-
ausgabe.
Die Optionen der Korn-Shell können Sie während der Sitzung
ändern. Durch ein Minuszeichen - vor dem Buchstaben werden die
Optionen eingeschaltet, durch ein Pluszeichen + ausgeschaltet.
Die aktuell gesetzten Optionen finden Sie in der Variable $-.
Alle Optionen können Sie auch beim Aufruf der Korn-Shell verwen-
den.
Es stehen folgende Optionen zur Verfügung:
-A name
Wertzuweisung für Felder: Löscht den Wert der Variablen name
und weist ihr dann sequentiell aus der argument-Liste Werte
zu. Verwenden Sie das Pluszeichen +A, dann werden die Werte
vor der Zuweisung nicht gelöscht.
-a Ab sofort werden alle neu definierten Variablen automatisch
exportiert.
-b Zu Ende geführte Hintergrundprozesse werden dem Benutzer
gemeldet.
-C Bei der Umlenkung der Ausgabe mit > werden keine existieren-
den Dateien überschrieben.
-e Wenn ein Kommando einen Endestatus ungleich 0 hat, wird die
Signalbehandlung für ERR ausgeführt (falls sie definiert
ist) und die Korn-Shell beendet.
Seite 54 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
-f Die Dateinamen-Erzeugung wird unwirksam gemacht.
-h Zu jedem Kommando, das ausgeführt wird, wird in der Alias-
Tabelle eine mit Pfad versehene Alias-Variable (tracked
alias) angelegt.
-k Alle Argumente mit Variablenwertzuweisungen werden in die
Umgebung eines Kommandos aufgenommen, nicht nur die vor dem
Kommandonamen angegebenen.
-m Hintergrundkommandos werden in einer eigenen Prozeßgruppe
ausgeführt. Die Beendigung wird in einer Zeile berichtet.
Der Endestatus von Hintergrundaufträgen wird durch eine
Beendigungsmeldung quittiert. Bei einer interaktiven Korn-
Shell wird diese Option automatisch eingeschaltet.
-n Liest die Kommandos und überprüft sie auf Syntaxfehler,
führt sie jedoch nicht aus. Von einer interaktiven Korn-
Shell wird diese Option ignoriert.
-o argument
argument kann einer der folgenden Optionsnamen sein:
allexport
Entspricht -a.
bgnice
Alle Hintergrundaufträge werden mit niedrigerer Priori-
tät ausgeführt. Dies ist die standardmäßige Voreinstel-
lung.
emacs
Bearbeitung der Kommandos findet im emacs-Modus statt.
errexit
Entspricht -e.
gmacs
Ähnlich wie emacs. Siehe Kapitel emacs-Editiermodus
oben.
ignoreeof
Die Korn-Shell wird nicht durch Dateiende beendet.
Benutzen Sie dazu das eingebaute Kommando.
interactive
Interaktive Korn-Shell.
keywords
Entspricht -k.
Seite 55 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
markdirs
Alle Verzeichnisse, die bei der Dateinamen-Erzeugung
entstehen, erhalten einen Schrägstrich / am Ende ange-
fügt.
monitor
Entspricht -m.
noclobber
Bei der Umlenkung der Ausgabe mit > werden keine exi-
stierenden Dateien überschrieben. Entspricht -C.
noexec
Entspricht -n.
noglob
Entspricht -f.
nolog
Funktionsdefinitionen werden nicht in der History-Datei
gespeichert.
notify
Entspricht -b.
nounset
Entspricht -u.
privileged
Entspricht -p.
restricted
Eingeschränkte Korn-Shell. Siehe Kapitel Nur rksh oben.
trackall
Entspricht -h.
verbose
Entspricht -v.
vi Versetzt Sie in den Eingabemodus eines vi-ähnlichen
Zeilen-Editors bis Sie <ESCAPE> drücken. Sie befinden
sich dann im Kommandomodus. Ein Neue-Zeile-Zeichen sen-
det die Zeile.
viraw
Mit eingeschaltetem vi-Modus wird jedes Zeichen bear-
beitet, sobald es getippt wird.
xtrace
Entspricht -x.
Seite 56 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
-p Wenn die effektive Benutzernummer (Gruppennummer) ungleich der
realen Benutzernummer (Gruppennummer) ist, wird die Bearbeitung
der Datei $HOME/.profile weggelassen und anstelle der ENV-Datei
die Datei /etc/suidprofile verwendet.
Schalten Sie diese Option durch das Pluszeichen (+p) aus, werden
die effektive Benutzer- und Gruppennummer auf die reale Benutzer-
und Gruppennummer gesetzt.
-s Sortiert die Stellungsparameter lexikographisch. Vorsicht: Diese
Option entspricht nicht der Option -s, die beim Aufruf der Korn-
Shell verwendet werden kann.
-t Beendet die Korn-Shell nach dem Lesen und Ausführen eines Komman-
dos.
-u Behandelt nicht gesetzte Parameter als Fehler bei der Ersetzung.
-v Gibt die Eingabezeile so aus, wie sie die Korn-Shell liest.
-x Gibt die Kommandos und ihre Argumente so aus, wie sie ausgeführt
werden.
- Schaltet die Optionen -v und -x aus und nimmt den Rest der Kom-
mandozeile als argument ... - es wird nicht nach weiteren Optio-
nen gesucht.
-- Keine der Optionen wird geändert. Benutzen Sie diese Option, wenn
Sie an $1 einen Wert, der mit Minuszeichen beginnt, zuweisen wol-
len. Folgt auf diese Option kein Argument, werden die Werte der
Stellungsparameter gelöscht.
+shift [zahl]
Die Stellungsparameter $zahl+1, ... werden in $1, ... umbenannt,
d. h. die Werte der Stellungsparameter werden nach links verscho-
ben. Bei fehlender zahl wird standardmäßig 1 eingesetzt. $0
bleibt bei dieser Aktion erhalten. Das Argument zahl kann ein
arithmetischer Ausdruck sein, der als Ergebnis eine positive
ganze Zahl kleiner gleich $# ergibt.
test Siehe Bedingte Ausdrücke oben bzw. Kommando test(1).
+times
Druckt die aufaddierten Benutzer- und System-Zeiten von der aktu-
ellen Korn-Shell und den daraus gestarteten Prozessen aus.
+trap [kommando] [signal ...]
kommando kann eine Liste von Kommandos enthalten, die von der
Korn-Shell gelesen werden und beim Empfang eines der Signale
signal ausgeführt werden sollen.
Seite 57 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
(Vorsicht: kommando wird zweimal interpretiert - das erste Mal,
wenn die Korn-Shell trap ausführt und das zweite Mal, wenn
kommando für ein Signal ausgeführt wird.)
signal können Sie durch die Signalnummer oder den Signalnamen
beschreiben (siehe kill). trap-Kommandos werden in der Reihen-
folge der Signalnummern ausgeführt.
trap-Kommandos werden abhängig von den Signalnummern ausgeführt.
Jeder Versuch, eine Signalbehandlung für ein Signal zu setzen,
das beim Aufruf der aktuellen Korn-Shell auf ignorieren gesetzt
war, bleibt ohne Wirkung. Die Signalbehandlung(en) für signal
werden auf ihre Standardwerte gesetzt, wenn Sie kommando weglas-
sen, oder das Minuszeichen - dafür angeben. Wenn Sie die leere
Zeichenkette ("") als kommando für signal angeben, wird das Sig-
nal von der Korn-Shell und von allen aus ihr aufgerufenen Prozes-
sen ignoriert. Steht ERR für signal, wird kommando immer dann
ausgeführt, wenn ein Kommando einen Endestatus ungleich 0 hat.
Geben Sie DEBUG für signal an, wird kommando nach jedem Kommando
ausgeführt. Ist signal 0 oder EXIT und wurde das trap-Kommando
innerhalb einer Funktion aufgerufen, wird kommando nach Beenden
der Funktion ausgeführt. Wurde analog trap außerhalb einer Funk-
tion aufgerufen, wird kommando beim Beenden der Korn-Shell ausge-
führt.
Ein trap-Kommando, ohne kommando und signal aufgerufen, schreibt
die Liste der Signalnummern mit den dazugehörigen Kommandos auf
die Standardausgabe.
true Siehe : bzw. Kommando true(1).
++typeset [option ...] [name[=wert]] ...
Mit typeset können Sie zwei Dinge tun:
- Variablen mit Zusatzinformation auf die Standardausgabe
schreiben
- Attribute und Werte von Variablen setzen.
Sind weder option noch name[=wert] angegeben, dann schreibt die
Korn-Shell die Namen und Attribute aller Variablen auf die Stan-
dardausgabe.
Mit Option, aber ohne name werden alle Variablen (und deren
Attribute) aufgelistet, auf welche die Option zutrifft.
Benutzen Sie das Pluszeichen + anstelle des Minuszeichens -, wer-
den die Werte der Variablen nicht gedruckt.
Seite 58 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
Durch option können Sie der Variablen name[=wert] ein oder meh-
rere Attribute geben. Rufen Sie typeset innerhalb einer Funktion
auf, wird eine neue Instanz der Variablen name angelegt. Attribut
und Wert werden nach Verlassen der Funktion wieder hergestellt.
Durch ein Minuszeichen - vor dem Buchstaben werden die Attribute
eingeschaltet, durch ein Pluszeichen + ausgeschaltet.
Die folgende Liste von Attributen können Sie als Optionen angeben:
-H Diese Option bietet auf Nicht-UNIX-Rechnern die Möglichkeit,
Dateinamen so umzuwandeln, daß sie entsprechend der UNIX-
Konventionen den Rechnernamen enthalten.
-L[zahl]
Der Wert wird linksbündig abgelegt und führende Blanks wer-
den gelöscht.
zahl ungleich 0 definiert die Länge des Feldes, sonst wird
die Länge des Feldes durch die Länge der ersten Wertzuwei-
sung bestimmt.
Diese Länge ist im folgenden bestimmend. Wird der Variablen
ein neuer Wert zugewiesen, dann wird entweder bei zu langer
Zuweisung rechts abgeschnitten oder mit Leerzeichen aufge-
füllt.
Führende Nullen werden ebenfalls gelöscht, wenn die Option
-Z gesetzt ist. Die Option -R wird von -L ausgeschaltet.
-R[zahl]
Rechtsbündige Ablage des Werts, führende Blanks werden am
Anfang von wert eingefügt.
zahl ungleich 0 definiert die Länge des Feldes, sonst wird
die Länge des Feldes durch die Länge der ersten Wertzuwei-
sung bestimmt. Diese Länge ist im folgenden bestimmend.
Wird der Variable ein neuer Wert zugewiesen, dann wird ent-
weder bei zu langer Zuweisung rechts abgeschnitten oder
links mit Leerzeichen aufgefüllt.
Die Option -L wird von -R ausgeschaltet.
-Z[zahl]
Rechtsbündige Ablage des Werts, führende Nullen werden am
Anfang von wert eingefügt, wenn das erste Zeichen ungleich
Blank eine Ziffer ist und die Option -L nicht eingeschaltet
ist. zahl ungleich 0 definiert die Länge des Feldes, sonst
wird die Länge des Feldes durch die Länge der ersten Wertzu-
weisung bestimmt.
Seite 59 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
-f Die Namen gehören zu Funktionen und nicht zu Variablen. Die
Korn-Shell legt die Funktionen in der Datei .shhistory ab.
Sie können deshalb die Definition einer Funktion am Bild-
schirm nicht ausgeben lassen, wenn die Datei .shhistory
nicht vorhanden ist, oder wenn die Option nolog beim Lesen
der Funktion gesetzt war. Sie können keine Wertzuweisungen
vornehmen und nur die folgenden Optionen sind in Verbindung
mit -f zulässig:
-t Die Ausführungsüberwachung wird für die Funktion einge-
schaltet.
-u Die Funktion wird als nichtdefiniert markiert. Die
Variable FPATH wird zum Suchen der Funktion verwendet,
wenn die Funktion das nächste Mal aufgerufen wird.
-x Die Funktionsdefinition bleibt über namentliche Aufrufe
von Korn-Shell-Prozeduren erhalten, d. h. die Funktion
wird exportiert.
-i[zahl]
Die Variable ist eine ganze Zahl (integer). Diese Option
beschleunigt die Berechnung. zahl ungleich 0 definiert die
Basis der Ausgabe, sonst bestimmt die erste Wertzuweisung
die Basis.
-l Alle Großbuchstaben werden in Kleinbuchstaben umgewandelt.
Die Option -u wird ausgeschaltet.
-r Die angegebenen Variablen werden als nur lesbar (readonly)
markiert. Die Werte dieser Variablen können nicht mehr durch
Zuweisungen verändert werden.
-t Markiert die Variable: Marken sind benutzerspezifisch und
haben für die Korn-Shell keine spezielle Bedeutung.
-u Alle Kleinbuchstaben werden in Großbuchstaben umgewandelt.
Die Option -l wird ausgeschaltet.
-x Die angegebenen Namen werden so markiert, daß sie automa-
tisch in neue Umgebungen exportiert werden.
ulimit [option ...] Format 1
ulimit [option ...] grenzwert Format 2
Mit ulimit können Sie die Grenzwerte Ihrer Prozesse abfragen und
setzen. Die Grenzwerte sind in getrlimit beschrieben.
Seite 60 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
Format 1: Grenzwerte abfragen
ulimit schreibt die durch option (siehe unten) abgefragten Grenz-
werte auf die Standardausgabe. Sie können die Optionen beliebig
kombinieren.
-a Wollen Sie alle Grenzwerte gleichzeitig sehen, verwenden Sie
die Option -a.
Format 2: Grenzwerte setzen
ulimit setzt den durch Option bezeichneten Grenzwert auf
grenzwert. Die Zeichenkette unlimited fordert den maximalen
Grenzwert. Sie können mit jedem Aufruf immer nur einen Grenzwert
neu setzen. Jeder Benutzer kann einen "weichen" Grenzwert (soft
limit) auf einen Wert kleiner dem "harten" Grenzwert (hard limit)
setzen. Als Benutzer ohne Systemverwalter-Privilegien können Sie
jeden harten Grenzwert zwar erniedrigen, aber nur der Systemver-
walter kann einen harten Grenzwert auch erhöhen [siehe su(1)].
-H Durch die Option -H sprechen Sie einen harten Grenzwert an.
-S Durch die Option -S sprechen Sie einen weichen Grenzwert an.
Ist keine dieser beiden Optionen angegeben, dann setzt ulimit
beide Grenzwerte und zeigt den weichen Wert an.
Durch folgende Optionen können Sie die abzufragenden oder zu set-
zenden Grenzwerte angeben. Ist keine Option angegeben, wird -f
verwendet.
-c Maximale Größe einer core-Datei (in 512 Byte-Blöcken)
-d Maximale Größe eines Datensegments oder Heaps (in Kbytes)
-f Maximale Dateigröße (in 512 Byte-Blöcken)
-n Maximale Anzahl von Dateikennzahlen plus 1
-s Maximale Größe des Stacksegments (in Kbytes)
-t Maximal verbrauchbare CPU-Zeit (in Sekunden)
-v Maximale Größe des virtuellen Speichers (in Kbytes)
umask [-S] [--] [maske]
Mit umask können Sie die aktuelle Schutzbit-Maske abfragen oder
neu setzen. Fehlt maske, wird die aktuelle Schutzbit-Maske auf
die Standardausgabe geschrieben. Ist maske angegeben, wird die
Schutzbit-Maske gesetzt [siehe umask(1)]. maske kann entweder als
Oktalwert angegeben oder symbolisch umschrieben werden [siehe
chmod(1)]. Bei einer symbolischen Angabe berechnet sich die neue
Seite 61 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
Schutzbit-Maske aus dem Komplement der Anwendung von maske auf
das Komplement der aktuellen Schutzbit-Maske.
-S Ausgabe symbolisch in der Form u=rechtebenutzer,
g=rechtegruppe, o=rechteandere, wobei rechte* als Kombi-
nation der Buchstaben r, w, x ausgegeben wird.
-- Ende der Optionenliste. Die Angabe ist nötig, wenn maske mit
- beginnt.
unalias [-a] [name ...]
Die durch name gegebenen Variablen werden aus der Alias-Tabelle
gelöscht. Bei Angabe von -a werden alle Alias-Definitionen aus
der Alias-Tabelle gelöscht.
unset [-fv] name ...
Die Werte und Attribute der durch name ... gegebenen Variablen
werden gelöscht. Die Werte und Attribute von als nur lesbar mar-
kierten Variablen können nicht gelöscht werden. unset der Varia-
blen ERRNO, LINENO, MAILCHECK, OPTARG, OPTIND, RANDOM, SECONDS,
TMOUT und entfernt die Spezialfunktion dieser Variablen, auch
wenn ihnen später wieder Werte zugewiesen werden. Durch die
Option -f werden die Namen von Funktionen angesprochen, durch -v
die Namen von Variablen.
+wait [job ...]
Wartet auf den Auftrag und berichtet seinen Endestatus. Ist job
nicht angegeben, wird auf alle momentan aktiven Sohnprozesse
gewartet. Der Endestatus von wait ist der des Prozesses, auf den
gewartet wurde. Der Abschnitt Aufträge oben enthält eine
Beschreibung des Formats von job.
whence [-pv] name ...
Für jeden Namen wird angezeigt, wie er als Kommandoname interpre-
tiert werden würde.
-v Gibt eine ausführlichere Liste aus.
-p Durchsucht den Suchpfad auch dann, wenn name eine Alias-
Variable, eine Funktion oder ein reserviertes Wort ist.
ENDESTATUS
Normalerweise gibt die Korn-Shell den Endestatus des letzten ausge-
führten Kommandos zurück [siehe exit(1)].
1-125 Von der Korn-Shell erkannte Fehler, wie z. B. Syntaxfehler,
führen zu einem Endestatus ungleich 0. Wird die Korn-Shell
nicht-interaktiv benutzt, dann wird die Bearbeitung der
Prozedur-Datei abgebrochen. Von der Korn-Shell erkannte Lauf-
zeitfehler werden durch Ausgabe des Kommandonamens und der
Fehlerbedingung berichtet. Ist die Zeilennummer der Zeile mit
dem fehlerhaften Kommando größer eins, dann wird nach dem
Seite 62 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
Kommando- oder Funktionsnamen noch die Zeilennummer in eckigen
Klammern [...] angegeben.
126 Das angegebene Kommando existiert, konnte aber nicht aufgeru-
fen werden.
127 Die angegebene Kommando-Datei konnte von einer nicht-inter-
aktiven Shell nicht gefunden werden.
WEITERE UNTERSCHIEDE KORN-SHELL - BOURNE-SHELL
Da das Verhalten der Korn-Shell (ksh) und der Bourne-Shell (sh) nicht
in allen Punkten gleich ist, kommt es auch bei Shell-Skripten zu
unterschiedlichen Verhalten (vgl. auch das Kapitel Wesentliche Erwei-
terungen der Korn-Shell gegenüber der Bourne-Shell oben).
Zur Zeit sind folgende Unterschiede bekannt:
1. Wird in einer Schleife (for, until, while) ein exit ausgeführt und
die Eingabe aus einer Datei gelesen, so beendet die Bourne-Shell
die Schleife, und die Korn-Shell beendet das Skript. Beispiel mit
einer while-Schleife:
while read i
do
echo $i
if [ "$i" = "ende" ]
then
exit 199
fi
done < inputfile
retflag=$?
echo $retflag
2. Das Shell-Builtin cd verhält sich bei der Verwendung von Metazei-
chen (*, ?) unterschiedlich.
Im aktuellen Verzeichnis sind die Unterverzeichnisse dircmd,
dirlib und dirhead enhalten.
cd dir*
Die Korn-Shell bringt die Fehlermeldung "bad argument count", und
die Bourne-Shell wechselt in das Verzeichnis mit der ersten Muster-
erkennung (dircmd).
3. Aufrufparameter werden unterschiedlich interpretiert.
Aufruf auf der Shell-Ebene:
((/tmp/shelltest add "-po XON") 2>&1)
Seite 63 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
Korn-Shell:
$1 = add
$2 = -po
$1 = XON
Bourne-Shell:
$1 = add
$2 = -po XON
4. Bei der Korn-Shell ist time am Zeilenanfang ein Schlüsselwort (wie
if, then usw.; vgl. oben Abschnitt Reservierte Wörter). Bei der
Bourne-Shell ist time ein normales Benutzerkommando (/usr/bin).
Abweichungen bezüglich time machen sich wie folgt bemerkbar.
Das Verhalten des Aufrufs
time pipeline
ist unterschiedlich. So werden bei der Korn-Shell die Kommandos der
Pipeline ausgeführt und anschließend in einer Statistik die ver-
strichene Zeit, die Benutzer- und die Systemzeit für diese Komman-
dos auf die Standardfehlerausgabe ausgegeben.
Bei der Bourne-Shell wird time nur für das 1. Kommando der Pipeline
ausgeführt und die Statistik schon vorher ausgegeben.
So führt ein Aufruf
time ls | pg
bei der Korn-Shell dazu, daß man zunächst die Ausgabe von ls sieht
und die Eingabe von pg durchführen muß. Erst wenn alles beendet
ist, wird die Statistik für ls und pg ausgegeben.
Bei der Bourne-Shell wird zuerst die Statistik ausgegeben, und dann
folgen die Ausgaben von ls sowie die Eingaben für pg [vgl.
xpg4sh(1)].
5. Die Korn-Shell liefert bei einer Funktion in einem Shell-Skript in
$0 den Funktionsnamen, die Bourne-Shell liefert auch dort den Namen
des Shell-Skripts.
Beispielsweise in folgendem Shell-Skript mit Namen test.sh:
dummy()
{
echo $0
}
dummy
Seite 64 Reliant UNIX 5.44 Gedruckt 11/98
ksh(1) ksh(1)
Die Korn-Shell echot dummy, die Bourne-Shell echot test.sh [vgl.
xpg4sh(1)].
DATEIEN
/etc/passwd
/etc/profile
/etc/suidprofile
$HOME/.profile
/tmp/sh*
/dev/null
SIEHE AUCH
cat(1), cd(1), chmod(1), colon(1), cut(1), dot(1), echo(1), env(1),
newgrp(1), paste(1), stty(1), test(1), umask(1), vi(1), xpg4sh(1),
dup(2), exec(2), fork(2), getrlimit(2), ioctl(2), lseek(2), pipe(2),
signal(2), ulimit(2), umask(2), wait(2), rand(3C), a.out(4),
profile(4), environ(5), signal(5).
M. I. Bolski und D. G. Korn, The Korn-Shell Command and Programming
Language
Seite 65 Reliant UNIX 5.44 Gedruckt 11/98