Was bedeutet der Bindestrich „-“ am Ende eines Befehls?

Was bedeutet der Bindestrich „-“ am Ende eines Befehls?

Gegeben sei der folgende Befehl:

gzip -dc /cdrom/cdrom0/file.tar.gz | tar xvf –

Was bedeutet das -am Ende des Befehls? Ist es eine Art Platzhalter?

Antwort1

In diesem Fall bedeutet es „Standardeingabe“. Es wird von manchen Programmen (z. B. tar) verwendet, wenn ein Dateiargument erforderlich ist und Sie stattdessen stdin verwenden müssen. Es ist keine Shell-Konstruktion und hängt von dem von Ihnen verwendeten Programm ab. Lesen Sie im Zweifelsfall die Manpage!

In diesem Fall ist die Standardeingabe das Argument für die -fOption. In Fällen, in denen dies nicht unterstützt wird, können Sie etwas wie oder -verwenden (letzteres wird in verschiedenen Unix-Versionen weitgehend unterstützt).tar xvf /proc/self/fd/0tar xvf /dev/stdin

Verlassen Sie sich nicht darauf, dass dies allgemein „Standardeingabe“ bedeutet. Da es nicht von der Shell interpretiert wird, kann jedes Programm damit umgehen, wie es will. In einigen Fällen ist es StandardAusgabeoder etwas ganz anderes: „on su“ bedeutet „Starte eine Login-Shell“. In anderen Fällen wird es überhaupt nicht interpretiert. Ich habe aus reiner Erinnerung ziemlich viele Dateien erstellt, die so benannt sind, -weil eine Version eines Programms, das ich gewohnt war, den Bindestrich nicht verstanden hat.

Antwort2

In diesem Fall -ist das eigentlich ziemlich nutzlos, vorausgesetzt, Sie verwenden Linux:

GNU tar (die Version unter Linux) akzeptiert standardmäßig die Eingabe von der Standardeingabe. Wenn SienichtWenn Sie dieses Verhalten wünschen und den Dateinamen als Kommandozeilenargument übergeben möchten, müssen Sie das Flag angeben f:

tar xf filename

Das ist also das gleiche wie

tar x < filename

Oder, wenn die Eingabe wie in Ihrem Beispiel gzippt ist:

gzip -dc filename | tar x

fEs ist nicht sinnvoll, das Flag hier überhaupt anzugeben , aber da es angegeben wurde, muss der Dateiname angegeben werden -, um anzuzeigen, dass wir von der Standardeingabe lesen möchten (siehe andere Antwort). Also, um es zu wiederholen, das ist redundant und etwas seltsam.

gzipDarüber hinaus kann die obige Zeile vereinfacht werden, da GNU Tar durch Angabe des zFlags angewiesen werden kann, die Eingabe durch sich selbst zu streamen :

tar xfz filename

– Kein expliziter Aufruf erforderlich gzip.

verwandte Informationen