In diesem Tutorial müssen wir den folgenden Befehl ausführen:
# curl -sL https://rpm.nodesource.com/setup_6.x | sudo -E bash -
Was bedeutet der letzte -
(Bindestrich) nach bash
?
Ich habe viele Befehle damit gesehen und konnte mir keine logische Erklärung finden und auch nicht herausfinden, wie ich eine Google-Suche danach umformulieren kann. Ist es die Ausgabe des Pipe-Befehls?
linux
command-line
bash
pipe
Omar BISTAMI
quelle
quelle
sudo bash
Klänge ist wirklich beängstigend. Suchen Sie nach einem Tutorial, das solche Praktiken nicht fördert.symbolhound.com
.Antworten:
Bash verhält sich etwas ungewöhnlich, wenn es darum geht
-
.POSIX sagt:
Und
Aber dann
man 1 bash
heißt es:Für Bash
-
bedeutet dies weder Standardeingabe noch eine Datei, daher etwas ungewöhnlich.Nun zu Ihrem speziellen Fall:
Ich vermute, dass der Autor dieses Befehls möglicherweise nicht erkennt
-
, dass er--
in diesem Fall dem entspricht. Ich vermute, der Autor wollte sicherstellenbash
, dass aus seiner Standardeingabe gelesen wird, sie sollte-
nach der Richtlinie 13 funktionieren.Aber selbst wenn es nach der Richtlinie funktioniert,
-
wäre es hier unnötig, da esbash
erkennt, wenn seine Standardeingabe eine Pipe ist und entsprechend verhält (sofern nichts-c
anderes angegeben ist).Funktioniert
-
aber nicht nach der Richtlinie, es funktioniert wie--
. Trotzdem--
ist das hier unnötig, da es keine Argumente danach gibt.Meiner Meinung nach
-
ändert das Letzte nichts. Der Befehl würde ohne ihn funktionieren.Sehen Sie sich das folgende Beispiel an, um zu sehen, wie nützlich
--
und-
nützlich es im Allgemeinen sein kann.cat
In meinem Kubuntu werden beide Richtlinien befolgt und ich werde sie verwenden, um die Nützlichkeit von-
und zu demonstrieren--
.Lassen Sie eine Datei mit dem Namen
foo
existieren. Dadurch wird die Datei gedruckt:Lassen Sie eine Datei mit dem Namen
--help
existieren. Die Datei wird nicht gedruckt:Aber dies wird die Datei mit dem Namen drucken
--help
:Dadurch wird die genannte Datei
--help
mit der Standardeingabe verknüpft:Es scheint, dass Sie es nicht wirklich brauchen
--
, da Sie immer übergeben können,./--help
was mit Sicherheit als Datei interpretiert wird. Aber bedenken Siewenn Sie vorher nicht wissen, was der Inhalt der Variablen ist. Sie können es nicht einfach voranstellen
./
, da es ein absoluter Pfad sein kann und./
ihn brechen würde. Andererseits kann es sich um eine Datei mit dem Namen handeln--help
(warum nicht?). In diesem Fall--
ist sehr nützlich; Dies ist ein viel robusterer Befehl:quelle
Im
man bash
Ende der Optionen für einzelne Zeichen befindet sich:Wenn Sie den vollständigen Befehl zitiert habe, kann ich keinen Grund zu der Verwendung finden ,
-
nachdembash
in diesem Fall, aber es schadet nicht.quelle
-
, eine unwahrscheinliche Voraussetzung, aber-
ich--
mache es möglich.cat file1 - file2 > file3
.bash -
bedeutet, dassbash
auf stdin gewartet wird. Bash führt also praktisch alles aus, was der Befehl auf der linken Seite zurückgibt|
Ein ähnliches, aber einfacheres Beispiel wäre:
echo hello | cat -
Hiercat
wird "Hallo" gedruckt. Warum? Weil 'hallo' durch|
und zu cat geschickt wirdcat
auf alles wartet, was an sie gesendet wirdLassen Sie uns nun den gesamten Befehl in zwei Teile aufteilen:
Dieser curl-Befehl gibt etwas zurück, das von bash verstanden und ausgeführt werden kann
Dann haben wir eine Pipe,
|
die die Ausgabe, die durch den Befehl curl zurückgegeben wird, an die rechte Seite der Pipe sendet, dsudo -E bash -
. h . Schließlichsudo -E bash -
ist bash in der Lage, alles auszuführen, was an bash gesendet wirdquelle