Beim Versuch, dropbox von der Kommandozeile aus zu installieren, habe ich die Kommandos gelesen
cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -
was -
heißt hier ist es das vorherige Verzeichnis?
command-line
tar
Algebra
quelle
quelle
f -
. Dies könnte das Auffinden der Antwort in den Manpages etwas erleichtern.wget
und unklar isttar
. Auf diese Weise können die jeweiligen Entwickler ihre Dokumentation verbessern, sodass zukünftige Benutzer nicht erneut über dieselben Probleme stolpern. Mit anderen Worten: Sei ein Held und mache die Welt zu einem besseren Ort!$TAPE
gesetzt ist.Antworten:
Einige Befehle akzeptieren
-
anstelle eines Dateinamens:-
Argument, an daswget
danach übergeben wurde,-O
tut.-
Argument übergebentar
nachxzf
.Mit dem
wget
angezeigten Befehl wird eine Archivdatei heruntergeladen und mit entpackttar
. Um dies zu erreichen, wird der Ausgang deswget
IS geleitet (|
) mit dem Eingangtar
. Aus diesem Grundwget
wird anstelle einer Datei in die Standardausgabe geschrieben und anstelle einer Dateitar
aus der Standardeingabe gelesen.quelle
-
. . Also , wenn-
ein Operand für eine „Datei - Option“ und es hat eine besondere Bedeutung, dann muss er die von stdin / stdout sein. Das Programm ist frei, nicht als Sonderfall zu behandeln und suchen Sie einfach nach Datei-
-
)-
speziell überhaupt, als ein wörtlichen Dateinamen zu behandeln. Die einzige Möglichkeit, gegen die Richtlinie zu verstoßen, besteht darin, sie-
speziell zu behandeln, jedoch mit einer anderen Bedeutung als der, die die Richtlinie vorschlägt.Das ist nur ein Dateiname, den viele Unix-Programme als "anstatt eine Datei zu öffnen, lesen
stdin
(oder schreibenstdout
)" interpretieren .Das bedeutet, dass von der Eingabe gelesen wird, die in das Programm gestreamt wird. in deinem Fall ist das die Ausgabe von wget.
quelle
./-
wenn Sie tatsächlich eine Datei mit dem Namen öffnen möchten-
.stdin
ist dies ein Dateideskriptor und-
der Name, den Sie angeben, um diesen zu verwenden. Aus Sicht des Betriebssystems handelt es sich jedoch nicht um einen Dateinamen. Nur aus Benutzersicht./dev/stdin
ist nur ein Dateiname, den ein Kernel anbietet. Es ist in der Regel nichtfopen("/dev/stdin", "r")
überall passiert , wenn Sie ein Programm schreiben , dass wählt stdin zu verwenden; Sie gehen einfach weiter und verwenden dasextern FILE* stdin
, was Sie von Ihrem libc-Header erhalten haben. das ist übrigens der Integer-Dateideskriptor0
.Das
-
Argument fürtar
gibt an, dass das Archivstdin
anstelle einer Datei gelesen werden soll . Aus dem GNU-Teer-Handbuch :Andere Befehle haben das gleiche Verhalten und sind im POSIX.1-2017-Standard festgelegt :
quelle