Was ist die Magie von "-" (ein Bindestrich) in Befehlszeilenparametern?


100

Beispiele:

  • Erstellen Sie ein ISO-Image und brennen Sie es direkt auf eine CD.

    mkisofs -V Photos -r /home/vivek/photos | cdrecord -v dev=/dev/dvdrw -

  • Wechseln Sie in das vorherige Verzeichnis.

    cd -

  • Lauschen Sie Port 12345 und entpacken Sie die an ihn gesendeten Daten.

    nc -l -p 12345 | tar xvzf -

Was ist der Zweck des Bindestrichs und wie verwende ich ihn?

Antworten:


111

Wenn Sie -am Ende des tarBefehls " nackt" meinen , ist dies bei vielen Befehlen üblich, die eine Datei verwenden möchten.

Hier können Sie anstelle eines tatsächlichen Dateinamens eine Standardeingabe oder -ausgabe angeben .

Dies ist bei Ihrem ersten und dritten Beispiel der Fall. Der cdrecordBefehl nimmt beispielsweise die Standardeingabe (den von erzeugten ISO-Bildstrom mkisofs) und schreibt sie direkt in /dev/dvdrw.

Mit dem cdBefehl wird jedes Mal, wenn Sie das Verzeichnis wechseln, das Verzeichnis gespeichert, aus dem Sie gekommen sind. Wenn Sie cdmit dem speziellen -"Verzeichnisnamen" arbeiten, wird dieses gespeicherte Verzeichnis anstelle eines echten Verzeichnisses verwendet. Auf diese Weise können Sie ganz einfach schnell zwischen zwei Verzeichnissen wechseln.

Andere Befehle können -als anderer Sonderwert behandelt werden.


9
Beachten Sie, dass Sie auch -für Git-Zweige verwenden können, dh Sie können mitgit checkout -
snappieT

3
Wo in den TAR-Dokumenten wird erklärt, dass es unterstützt wird? Woher weiß ich, welche Befehle dies unterstützen?

1
Wenn ein Befehl eine besondere Bedeutung für hat -, finden Sie seine Erklärung in der Manpage.
Codeforester

su - #make die Shell eine Login-Shell
atongsa

Ich finde einen Befehl wie diesen sehr merkwürdig: tar -cvf - / home | aescrypt -e -p Äpfel -> backup_files.tar.aes, was tatsächlich tar -cvf - / home | ist aescrypt -e -p Äpfel -o backup_files.tar.aes - weil das Rohrleitungszeichen | sollte das Vorhandensein des letzten Strichs unnötig machen. Aber ohne den letzten Strich schlägt der Befehl fehl. Klingt unlogisch. Kann mir bitte jemand eine Referenz geben, in der die Bedeutung des nackten Strichs in Befehlszeilen erklärt wird. Ich kann keine finden.
Elmclose

22

Es ist keine Magie. Einige Befehle werden so interpretiert -, dass der Benutzer von stdin lesen oder in stdout schreiben möchte. An der Schale ist nichts Besonderes.


9
Außer im Fall von cd -; bash(1)behandelt, cd -als ob Sie geschrieben hätten cd $OLDPWD.
Sarnold

6
@sarnold Aber der Punkt ist der gleiche cd- ein in die Shell integrierter Befehl - interpretiert einen Bindestrich selbst. Keine "Magie" :-)

2
@pst, sicher, keine Magie (es ist alles nur Code :), aber es ist etwas Besonderes , um es in die Schale.
Sarnold


9

-bedeutet genau das, was jeder Befehl bedeuten soll. Es gibt mehrere gängige Konventionen, und Sie haben Beispiele für die meisten davon in anderen Antworten gesehen, aber keine davon ist 100% universell.

Es gibt nichts Magisches an dem -Charakter, was die Shell betrifft (außer dass die Shell selbst und einige ihrer eingebauten Befehle wie cdund echoauf herkömmliche Weise verwendet werden). Einige Zeichen, wie \, 'und ", sind "magisch" und haben überall dort, wo sie erscheinen, eine besondere Bedeutung. Dies sind "Shell-Metazeichen". -ist nicht so.

Lesen Sie die Dokumentation zu diesem Befehl- , um zu sehen, wie ein bestimmter Befehl verwendet wird .


7

Die Magie liegt in der Konvention. Seit Jahrtausenden verwenden Menschen '-', um Optionen von Argumenten zu unterscheiden, und haben '-' in einem Dateinamen verwendet, um je nach Bedarf entweder stdin oder stdout zu bedeuten. Unterschätzen Sie nicht die Kraft der Konvention!


Überschätzen Sie nicht die Fähigkeit der Menschen, Sprachweisen von wörtlichen Ausdrücken zu unterscheiden. Dies ist seit Jahrtausenden nicht mehr so.
Tripleee

1
@tripleee - Stimmt, aber es hat Milliarden von Sekunden gedauert. ;-)
David R Tribble

5

Es bedeutet, den Standardeingabestream des Programms zu verwenden.

Im Fall von cdbedeutet dies etwas anderes: Wechseln Sie in das vorherige Arbeitsverzeichnis.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.