getopt - Befehlsoptionen auswerten (erweitert)
getopt Optionszeichenkette Parameter
getopt [Optionen] [
--]
Optionszeichenkette Parameter
getopt [Optionen]
-o|
--options Optionszeichenkette
[Optionen] [
--]
Parameter
getopt wird dazu verwendet, Optionen in Befehlszeilen für die
leichtere Auswertung durch Shell-Prozeduren auseinanderzunehmen und auf
gültige Optionen zu prüfen. Es verwendet hierfür die
Routinen GNU
getopt(3).
Die mit
getopt aufgerufenen Parameter können in zwei Teile zerlegt
werden: Optionen, die die Auswertung durch
getopt verändern (die
Optionen und die
Optionszeichenkette in der
ÜBERSICHT) und den Parametern, die ausgewertet werden sollen (
Parameter in der
ÜBERSICHT). Der zweite Teil beginnt beim
ersten von einer Option verschiedenen Parameter, der kein Argument für
eine Option ist, oder nach dem ersten Auftreten von »
--«. Falls im ersten Teil weder die Option »
-o« noch »
--options« gefunden wird, wird
der erste Parameter des zweiten Teils als kurze Optionszeichenkette verwandt.
Falls die Umgebungsvariable
GETOPT_COMPATIBLE gesetzt ist oder der erste
Parameter keine Option ist (er startet nicht mit
»
-«, dem ersten Format in der
ÜBERSICHT),
wird
getopt Ausgaben erzeugen, die mit denen anderer Versionen von
kompatibel sind. Es wird weiterhin Parameter tauschen und
optionale Argumente erkennen (siehe Abschnitt
KOMPATIBILITÄT
für weitere Informationen).
Traditionelle Implementierungen von sind nicht in der Lage, mit
Leerräumen und anderen (Shell-spezifischen) Sonderzeichen in Argumenten
und in von Optionen verschiedenen Parametern umzugehen. Um dieses Problem zu
lösen, kann diese Implementierung geschützte Ausgaben erzeugen,
die erneut durch die Shell (normalerweise mittels des Befehls
eval)
interpretiert werden müssen. Damit werden diese Zeichen erhalten. Sie
müssen aber
getopt dergestalt aufrufen, dass es nicht
länger zu anderen Versionen kompatibel ist (das zweite oder dritte
Format in der
ÜBERSICHT). Um zu prüfen, ob bei Ihnen
diese erweiterte Version von installiert ist, kann eine
spezielle Test-Option (
-T) verwandt werden.
-a,
--alternative
erlaubt es, lange Optionen mit einem einfachen
» -« zu beginnen.
-l,
--longoptions Langoptionen
Die lange (Mehrzeichen-)Option, die erkannt
werden soll. Es kann mehr als ein Optionsnamen auf einmal angegeben werden,
indem die Namen durch Kommata getrennt werden. Diese Option kann mehr als
einmal verwandt werden, die Langoptionen sind kumulativ. Jeder lange
Optionsname in Langoptionen darf durch einen Doppelpunkt gefolgt
werden, um anzuzeigen, dass er ein zwingend verlangtes Argument hat, und durch
zwei Doppelpunkte, um anzuzeigen, dass er ein optionales Argument hat.
-n,
--name Programmname
Der Name, der von den
getopt(3)-Routinen beim Melden von Fehlern verwendet wird. Beachten
Sie, dass Fehler von weiterhin als von Getopt kommend
gemeldet werden.
-o,
--options Kurzoptionen
Die kurzen (ein-Zeichen)-Optionen, die erkannt
werden sollen. Falls diese Option nicht gefunden wird, wird der erste
Parameter von getopt, der nicht mit » -« startet
(und kein Optionsargument ist), als die Kurzoptionszeichenkette verwandt.
Jedes Kurzoptionszeichen in shortopts kann von einem Doppelpunkt
gefolgt werden, um anzuzeigen, dass er ein verpflichtendes Argument hat, und
von zwei Doppelpunkten, um anzuzeigen, dass er ein optionales Argument hat.
Das erste Zeichen von »shortopts« kann ein »
+« oder » -« sein, um zu beinflussen, wie
die Optionen ausgewertet und die Ausgabe generiert wird (siehe Abschnitt
EINLESE-MODI für Details).
-q,
--quiet
-Q,
--quiet-output
erzeugt keine normale Ausgabe. Fehler werden
durch
getopt(3) gemeldet, außer Sie verwenden auch
-q.
-s,
--shell Shell
setzt die Schutzkonventionen auf die der
Shell. Falls die Option -s nicht angegeben ist, werden die
Konventionen der BASH verwendet. Gültige Argumente sind derzeit
» sh«, »bash«,
»csh« und » tcsh«.
-T,
--test
prüft, ob Ihr diese
erweiterte Version oder eine alte Version ist. Dies erzeugt keine Ausgabe und
setzt den Fehlerstatus auf 4. Andere Implementierungen von
und diese Version, falls die Umgebungsvariable GETOPT_COMPATIBLE
gesetzt ist, liefern » --« und einen Fehlerstatus von
0.
-u,
--unquoted
schützt die Ausgabe nicht. Beachten
Sie, dass Leerraum und besondere (Shell-abhängige) Zeichen in diesem
Modus zu Chaos führen können (wie sie dies auch in anderen
Implementierungen von erzeugen).
-h,
--help
zeigt einen Hilfetext an und beendet das
Programm.
-V,
--version
zeigt die Versionsnummer an und beendet das
Programm.
Dieser Abschnitt gibt das Format des zweiten Teils der Parameter von
getopt (den
Parametern in der
ÜBERSICHT) an. Der
nächste Abschnitt (
AUSGABE) beschreibt die erstellte Ausgabe.
Diese Parameter waren typischerweise die, mit denen eine Shell-Funktion
aufgerufen wurde. Es muss aufgepasst werden, dass jeder Parameter, mit dem
eine Shell-Funktion aufgerufen wurde, genau einem Parameter in der
Parameterliste von
getopt entspricht (siehe
BEISPIELE). Die
gesamte Auswertung erfolgt in den GNU-
getopt(3)-Routinen.
Die Parameter werden von links nach rechts ausgewertet. Jeder Parameter wird als
Kurzoption, als Langoption, als Argument für eine Option oder als
Nichtoptionsparameter eingestuft.
Eine einfache Kurzoption ist ein »
-« gefolgt von einem
Kurzoptionszeichen. Falls die Option ein zwingendes Argument hat, darf es
direkt nach dem Optionszeichen oder als nächster Parameter (d.h.
getrennt durch Leerraumzeichen auf der Befehlszeile) geschrieben werden. Falls
die Option ein optionales Argument hat, muss es sofern vorhanden direkt nach
dem Optionszeichen geschrieben werden.
Es ist möglich, mehrere Kurzoptionen nach einem »
-«
anzugeben, solange alle (außer möglicherweise dem letzten) keine
zwingenden oder optionalen Argumente haben.
Eine Langoption beginnt normalerweise mit »
--« gefolgt von
dem Namen der Langoption. Falls die Option ein zwingendes Argument kann, darf
dieses direkt nach dem Namen der Langoption, getrennt durch ein »
=«, oder als das nächste Argument (d.h. getrennt durch
Leerraumzeichen auf der Befehlszeile) geschrieben werden. Falls die Option ein
optionales Argument hat, muss es, falls vorhanden, direkt nach dem Namen der
Langoption, getrennt durch ein »
=« geschrieben werden.
Falls Sie das »
=« hinzufügen, aber nichts
dahinter, wird es so interpretiert, als ob kein Argument vorhanden
wäre; dies ist ein kleiner Fehler, siehe
FEHLER. Langoptionen
dürfen abgekürzt werden, so lange die Abkürzung noch
eindeutig ist.
Jeder Parameter, der nicht mit einem »
-« anfängt
und kein zwingendes Argument einer vorherigen Option ist, ist ein
Nichtoptionsparameter. Jeder Parameter nach einem »
--«-Parameter wird immer als Nichtoptionsparameter
interpretiert. Falls die Umgebungsvariable
POSIXLY_CORRECT gesetzt ist
oder falls die Kurzoptionszeichenkette mit einem »
+«
anfängt, werden alle verbliebenen Parameter als Nichtoptionsparameter
interpretiert, sobald der erste Nichtoptionsparameter gefunden wird.
Für jedes im vorherigen Abschnitt beschriebene Element wird eine Ausgabe
erstellt. Die Ausgabe erfolgt in der Reihenfolge, in der die Elemente in der
Eingabe vorliegen, außer für Nichtoptionsparameter. Die Ausgabe
kann im
kompatiblen (
ungeschützten) Modus erfolgen, oder
so, dass Leerraumzeichen und andere besondere Zeichen innerhalb von Argumenten
und Nichtoptionsparametern erhalten werden (siehe
SCHÜTZEN).
Wenn die Ausgabe in einem Shell-Skript verarbeitet wird, wird sie so
erscheinen, als ob sie aus getrennten Elementen bestünde, die einer
nach dem anderen verarbeitet werden können (in den meisten
Shell-Sprachen mittels des Befehls »shift«). Im
ungeschützten Modus ist das nicht perfekt, da Elemente an unerwarteten
Stellen aufgetrennt sein können, falls sie Leerraumzeichen oder
besondere Zeichen enthalten.
Falls es beim Auswerten der Parameter Probleme gibt, beispielsweise ein
zwingendes Argument nicht gefunden oder eine Option nicht erkannt wird, wird
ein Fehler auf Stderr berichtet. Es wird auch keine Ausgabe des betroffenen
Elements geben und ein von Null verschiedener Fehlerstatus wird
zurückgeliefert.
Für eine Kurzoption wird ein einzelnes »
-« und das
Optionszeichen als ein Parameter erstellt. Falls die Option ein Argument hat,
wird der nächste Parameter das Argument sein. Falls die Option ein
optionales Argument hat, aber keines gefunden wurde, wird der nächste
Parameter erstellt, aber im geschützten Modus leer sein. Im
ungeschützten (kompatibilitäts-)Modus wird kein zweiter
Parameter erstellt. Beachten Sie, dass viele andere
-Implementierungen optionale Argumente nicht
unterstützen.
Falls mehrere Kurzoptionen nach einem einzelnen »
-«
angegeben wurden, wird jede in der Ausgabe als separater Parameter vorhanden
sein.
Für eine Langoption werden »
--« und der komplette
Optionsname als ein Parameter erstellt. Dies erfolgt unabhängig davon,
ob die Option abgekürzt war oder mit einem einzelnen »
-« in der Eingabe angegeben wurde. Argumente werden wie bei den
Kurzoptionen gehandhabt.
Normalerweise wird keine Ausgabe für die Nichtoptionsparameter erstellt,
bis alle Optionen und ihre Argumente erstellt wurden. Dann wird »
--« als einzelner Parameter und danach werden die
Nichtoptionsparameter in der gefundenen Reihenfolge, jeder als separater
Parameter, erstellt. Nur falls das erste Zeichen der Kurzoptionszeichenkette
ein »
-« war, wird die Ausgabe der Nichtoptionsparameter
an der Stelle erstellt, an der sie in der Eingabe gefunden wurden (dies wird
nicht unterstützt, falls das erste Format in der
ÜBERSICHT verwandt wird; in diesem Fall werden alle
vorangestellt auftretende »
-« und
»
+« ignoriert).
Im Kompatibilitätsmodus werden Leerraumzeichen und
»besondere« Zeichen in Argumenten nicht richtig behandelt. Da
die Ausgabe an das Shell-Skript übergeben wird, weiß das Skript
nicht, wie es die Ausgabe in separate Parameter zerlegen soll. Um dieses
Problem zu umgehen, bietet diese Implementierung das Schützen an. Die
Idee ist, dass die Ausgabe mit Anführungszeichen um jeden Parameter
erstellt wird. Wenn diese Ausgabe wieder an eine Shell (normalerweise mit dem
Befehl
eval einer Shell) übergeben wird, wird sie korrekt in
separate Parameter zerlegt.
Schützen wird nicht aktiviert, falls die Umgebungsvariable
GETOPT_COMPATIBLE gesetzt ist oder falls die erste Form der
ÜBERSICHT verwandt oder falls die Option »
-u« gefunden wird.
Verschiedene Shells verwenden verschiedene Schützkonventionen. Sie
können die Option »
-s« verwenden, um die von
Ihnen verwandte Shell auszuwählen. Die folgenden Shells werden derzeit
unterstützt: »
sh«, »
bash«,
»
csh« und »
tcsh«.
Tatsächlich werden nur zwei »Varianten« unterschieden:
Sh-artige Schützkonventionen und Csh-artige Schützkonventionen.
Es ist gut möglich, dass eine dieser Varianten verwandt werden kann,
falls sie eine andere Shell-Skript-Sprache verwenden.
Das erste Zeichen der Zeichenkette von Kurzoptionen kann ein »
-« oder ein »
+« sein, um einen speziellen
Einlese-Modus anzugeben. Wenn die erste Form verwendet wird, die unter
ÜBERSICHT angegeben ist, werden sie ignoriert. Trotzdem wird die
Umgebungsvariable
POSIXLY_CORRECT ausgewertet.
Wenn das erste Zeichen ein »
+« ist oder die
Umgebungsvariable
POSIXLY_CORRECT gesetzt ist, wird die Auswertung
beendet, sobald der erste Nichtoptionsparameter (also ein Parameter, der nicht
mit einem »
-« beginnt) erkannt wird, der kein
Optionsargument ist. Die restlichen Parameter werden alle als
Nichtoptionsparameter interpretiert.
Wenn das erste Zeichen ein »
-« ist, werden
Nichtoptionsparameter an der Stelle ausgegeben, an der sie gefunden werden. Im
normalen Modus werden sie alle am Ende der Ausgabe gesammelt, nachdem ein
»
--«-Parameter erzeugt wurde. Beachten Sie, dass dieser
»
--«-Parameter weiterhin erzeugt wird, aber immer der
letzte Parameter in diesem Modus ist.
Diese Version von wurde so geschrieben, dass sie so weit wie
möglich kompatibel zu anderen Versionen ist. Normalerweise
können Sie andere Versionen ohne Änderungen einfach durch diese
Version ersetzen und haben dadurch sogar noch einige Vorteile.
Wenn das erste Zeichen des ersten Parameters von getopt kein »
-« ist, läuft
getopt im
Kompatibilitätsmodus. Es interpretiert den ersten Parameter als
Zeichenkette von Kurzoptionen und alle weiteren Parameter werden ausgewertet.
Es ändert die Reihenfolge der Parameter (d.h. alle
Nichtoptionsparameter werden am Ende ausgegeben), es sein denn, die
Umgebungsvariable
POSIXLY_CORRECT ist gesetzt. In diesem Fall stellt
getopt den Kurzoptionen automatisch ein »
+« voran.
Die Umgebungsvariable
GETOPT_COMPATIBLE zwingt
getopt in den
Kompatibilitätsmodus. Wenn sowohl diese Umgebungsvariable als auch
POSIXLY_CORRECT gesetzt sind, kann 100% Kompatibilität
für »schwierige« Programme erreicht werden. Normalerweise
ist allerdings keine von beiden notwendig.
Im Kompatibilitätsmodus werden führende »
-«-
und »
+«-Zeichen in der Kurzoptionen-Zeichenkette
ignoriert.
getopt gibt den Fehlerstatus
0 bei einer erfolgreichen Auswertung
zurück,
1 falls
getopt(3) Fehler zurückliefert,
2 falls es die eigenen Parameter nicht auswerten kann,
3 falls
ein interner Fehler wie fehlender Speicher auftritt und
4 falls es mit
-T aufgerufen wird.
Beispielskripte für (ba)sh und (t)csh sind in der
-Distribution enthalten und werden optional im Verzeichnis
/usr/share/doc/util-linux/examples/ installiert.
POSIXLY_CORRECT
Diese Umgebungsvariable wird von den
getopt(3)-Routinen untersucht. Falls sie gesetzt ist, wird die
Auswertung gestoppt, sobald ein Parameter gefunden wird, der weder eine Option
noch ein Optionsargument ist. Alle restlichen Parameter werden ebenfalls als
Nichtoptionsparameter interpretiert, unabhängig davon, ob sie mit einem
»
-« beginnen oder nicht.
GETOPT_COMPATIBLE
erzwingt, dass getopt das erste in der
ÜBERSICHT angegebene Aufrufformat verwendet.
getopt(3) kann Langoptionen mit optionalen Argumenten auswerten, denen
ein leeres optionales Argument übergeben wurde. Allerdings kann es das
für Kurzoptionen nicht. Dieses behandelt optionale
Argumente, die leer sind, so, als wären sie nicht übergeben
worden.
Die Syntax ist nicht sehr intuitiv, wenn man keinerlei Kurzoptionen haben
möchte (sie müssen explizit auf eine leere Zeichenkette gesetzt
werden).
Frodo <
[email protected]>Looijaard
bash(1),
tcsh(1),
getopt(3)
Verwenden Sie zum Melden von Fehlern das Fehlererfassungssystem auf
<
https://github.com/util-linux/util-linux/issues>.
Der Befehl
getopt ist Teil des Pakets util-linux, welches heruntergeladen
werden kann von:
Linux Kernel Archive
<
https://www.kernel.org/pub/linux/utils/util-linux/>.
Die deutsche Übersetzung dieser Handbuchseite wurde von Dr. Tobias
Quathamer <
[email protected]>, Helge Kreutzmann
<
[email protected]> und Mario Blättermann
<
[email protected]> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die
GNU
General Public License Version 3 oder neuer bezüglich der
Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken
Sie bitte eine E-Mail an die
Mailingliste
der Übersetzer