Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ ksh(1) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

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)

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)

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

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026