GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Was bedeutet das letzte - (Bindestrich) in Optionen von `bash`?

Bash verhält sich etwas ungewöhnlich, wenn es um - geht .

POSIX sagt:

Richtlinie 10:
Die erste -- Argument, das kein Optionsargument ist, sollte als Trennzeichen akzeptiert werden, das das Ende von Optionen angibt. Alle folgenden Argumente sollten als Operanden behandelt werden, auch wenn sie mit - beginnen Zeichen.

[…]

Richtlinie 13:
Für Dienstprogramme, die Operanden verwenden, um Dateien darzustellen, die zum Lesen oder Schreiben geöffnet werden sollen, wird der - Operand sollte verwendet werden, um nur die Standardeingabe (oder die Standardausgabe, wenn aus dem Kontext klar ist, dass eine Ausgabedatei angegeben wird) oder eine Datei mit dem Namen - zu bezeichnen .

Und

Wenn ein Dienstprogramm, das im Band Shell and Utilities von POSIX.1-2017 als konform mit diesen Richtlinien beschrieben wird, den Operanden - akzeptieren oder nicht akzeptieren muss bedeutet Standardeingabe oder -ausgabe, diese Verwendung wird im Abschnitt OPERANDEN erklärt. Andernfalls, wenn ein solches Dienstprogramm Operanden verwendet, um Dateien darzustellen, ist es implementierungsdefiniert, ob der Operand - steht für Standardeingabe (oder Standardausgabe) oder für eine Datei namens - .

Aber dann man 1 bash lautet:

Ein -- signalisiert das Ende der Optionen und sperrt die weitere Optionsverarbeitung. Alle Argumente nach -- werden als Dateinamen und Argumente behandelt. Ein Argument von - entspricht -- .

Also für Bash - bedeutet weder Standardeingabe noch eine Datei, daher etwas nicht standardisiert.

Nun zu Ihrem speziellen Fall:

curl -sL https://rpm.nodesource.com/setup_6.x | sudo -E bash -

Ich vermute Der Autor dieses Befehls erkennt möglicherweise - nicht entspricht -- in diesem Fall. Ich vermute der Autor wollte sicherstellen, dass bash wird von seiner Standardeingabe gelesen, sie erwarteten - gemäß Richtlinie 13 zu arbeiten.

Aber auch wenn es nach der Richtlinie - funktioniert hat wäre hier unnötig, weil bash erkennt, wenn seine Standardeingabe eine Pipe ist, und verhält sich entsprechend (es sei denn, -c gegeben ist usw.).

Doch - funktioniert nicht nach Richtlinie, sondern wie -- . Immer noch -- ist hier unnötig, weil es keine Argumente danach gibt.

Meiner Meinung nach die letzte - ändert nichts. Der Befehl würde auch ohne funktionieren.

Um zu sehen, wie -- und - allgemein nützlich sein können, sehen Sie sich das Beispiel unten an.

cat in meinem Kubuntu befolgt beide Richtlinien und ich werde es verwenden, um die Nützlichkeit von - zu demonstrieren und -- .

Lassen Sie eine Datei namens foo existieren. Dies druckt die Datei:

cat foo

Lassen Sie eine Datei namens --help existieren. Dadurch wird die Datei nicht gedruckt:

cat --help

Aber dies wird die Datei namens --help drucken :

cat -- --help

Dadurch wird die Datei mit dem Namen --help verkettet mit was auch immer aus der Standardeingabe kommt:

cat -- --help -

Es scheint, dass Sie -- nicht wirklich brauchen , da Sie immer ./--help übergeben können die sicher als Datei interpretiert wird. Aber bedenke

cat "$file"

wenn Sie vorher nicht wissen, was der Inhalt der Variablen ist. Sie können ./ nicht einfach voranstellen da es ein absoluter Pfad sein kann und ./ würde es kaputt machen. Andererseits kann es sein eine Datei namens --help sein (weil warum nicht?). In diesem Fall -- ist sehr nützlich; Dies ist ein viel robusterer Befehl:

cat -- "$file"

In man bash , am Ende der Einzelzeichenoptionen steht:-

--    A -- signals the end of options and disables further option processing.
      Any arguments after the -- are treated as filenames and arguments. An
      argument of - is equivalent to --.

Wenn Sie den vollständigen Befehl zitiert haben, sehe ich keinen Grund, - zu verwenden nach bash in diesem Fall, aber es schadet nicht.


Linux
  1. Was bedeutet die Tilde (~) am Ende eines Dateinamens??

  2. Was bedeutet das Attribut „s“ in Dateiberechtigungen?

  3. Was bedeutet ein Punkt vor dem Variablennamen in struct?

  4. Was bedeutet __init im Linux-Kernel-Code?

  5. Was bedeutet opt ​​(wie im opt-Verzeichnis)? Ist es eine Abkürzung?

Was bedeutet kaufmännisches Und am Ende einer Shell-Skriptzeile?

Was bedeutet in der Ausgabe von Ps?

Was bedeutet die Syntax |&in der Shell-Sprache?

Was bedeutet das 'rc' in `.bashrc` usw.?

Was bedeutet der Schnittstellenname eth0 unter Linux?

Was bedeutet das Suffix .d unter Linux?