Was bedeutet "-" in Terminalbefehlen?

23

Ich habe viele Tutorials gesehen, die --After-Befehle verwenden. Etwas wie das:

command -- 

Was bedeutet dies --bedeuten?

Jibril
quelle
Welche Video-Tutorials?
TheWanderer
Eigentlich wundere ich mich, dass diese Frage auf AU nicht schon ein Trottel war. Werden identische Fragen zu anderen StackExchange-Communities nicht als Dupes gewertet (siehe den von @edwinksl angegebenen Link)? Wie ist die Einstellung dazu? Vielleicht sollte ich das auf META fragen ...
Cbhihe
@Cbhihe Mir ist kein Mechanismus bekannt, mit dem wir auf doppelte Ziele anderer SE-Sites verweisen können. Wie auch immer, es kommt nicht allzu oft vor, daher besteht wahrscheinlich keine Notwendigkeit dafür.
Edwinksl
3
@ anonymous2 warum um alles in der Welt würden wir das tun? Die Frage ist hier zum Thema, also kann es bleiben. Das Verschieben würde Informationen aus AU entfernen und U & L nichts Neues hinzufügen, daher verstehe ich nicht, warum dies eine gute Sache wäre.
Terdon

Antworten:

46

Mit --wird das Ende der Befehlszeilenoptionen angegeben. Auf diese Weise können Sie Argumente verwenden, die mit beginnen --. Wenn Sie beispielsweise eine Datei mit dem Namen erstellen --foo:

$ > '--foo'
$ ls
--foo

Und versuchen Sie dann, es zu löschen, rmund denken Sie, Sie geben ihm ein Argument:

$ rm --foo 
rm: unrecognized option '--foo'
Try 'rm ./--foo' to remove the file '--foo'.
Try 'rm --help' for more information.

Eine Möglichkeit, dies zu umgehen, ist die Verwendung von --:

$ rm -- --foo

Dies ist gängige Praxis und wird von POSIX empfohlen. Daher wird es von vielen Programmen unterstützt.

terdon
quelle
13
Es wird überhaupt nicht von Bash implementiert. Es ist eine Funktion des rmProgramms und vieler POSIX-kompatibler Dienstprogramme. Siehe Leitlinie 10 . Um tatsächlich zu überprüfen, ob Bash die Arbeit nicht erledigt (und das würde keinen Sinn ergeben), erstellen Sie einfach ein kleines Skript mit just printf '> %s <\n' "$@"und starten es mit --.
gniourf_gniourf
3
@gniourf_gniourf d'oh! Ich habe das überprüft, indem ich ein kleines Perl-Skript geschrieben habe, das die Optionen ausgibt und bei der Übergabe keine erkennt --, aber das liegt natürlich einfach daran, dass das betreffende Perl-Modul ( getopts) es auch unterstützt. Sie haben völlig recht, ich habe nur schnell gesucht man bash, den Abschnitt gesehen, den ich zitiert hatte, aber nicht bemerkt, dass er im Abschnitt "Befehlszeilenoptionen" war. Danke für die Korrektur, antworte bearbeitet.
Terdon
1

Die meisten Befehle verwenden ein -, um dem Befehl mitzuteilen, dass weitere Parameter anders behandelt werden sollen. Ein Beispiel ist der oben angegebene rm_filename. Ein anderes Beispiel: Ein Skript wie 'startx' interpretiert sich selbst vor - und übergibt alles danach an den X-Server.

geschlafen
quelle