Dans ce tutoriel, nous devons exécuter la commande suivante:
# curl -sL https://rpm.nodesource.com/setup_6.x | sudo -E bash -
Que signifie le dernier -
(trait d'union) après bash
?
J'ai vu beaucoup de commandes avec cela, et je n'ai pas pu trouver d'explication logique ni trouver comment reformuler une recherche Google pour cela. Est-ce la sortie de la commande piped?
linux
command-line
bash
pipe
Omar BISTAMI
la source
la source
sudo bash
sons vraiment effrayants. Essayez de rechercher un didacticiel qui n'encourage pas de telles pratiques.symbolhound.com
.Réponses:
Bash se comporte de manière quelque peu non standard en ce qui concerne
-
.POSIX dit:
Et
Mais
man 1 bash
lit ensuite :Donc pour Bash
-
ne signifie ni entrée standard ni fichier, donc quelque peu non standard.Maintenant, votre cas particulier:
Je soupçonne que l'auteur de cette commande peut ne pas réaliser que
-
c'est équivalent--
dans ce cas. Je soupçonne que l'auteur voulait s'assurer debash
lire à partir de son entrée standard, ils s'attendaient-
à travailler selon la directive 13.Mais même si cela fonctionnait selon la directive, ce
-
serait inutile ici car ilbash
détecte quand son entrée standard est un tuyau et agit en conséquence (sauf-c
etc.).Pourtant,
-
ne fonctionne pas selon la directive, cela fonctionne comme--
. C'est encore--
inutile ici car il n'y a pas d'arguments après.À mon avis, le dernier
-
ne change rien. La commande fonctionnerait sans elle.Pour voir comment
--
et-
peuvent être utiles en général, étudiez l'exemple ci-dessous.cat
dans mon Kubuntu obéit aux deux directives et je vais l'utiliser pour démontrer l'utilité de-
et--
.Laissez un fichier nommé
foo
exister. Cela imprimera le fichier:Laissez un fichier nommé
--help
exister. Cela n'imprimera pas le fichier:Mais cela imprimera le fichier nommé
--help
:Cela concaténera le fichier nommé
--help
avec tout ce qui provient de l'entrée standard:Il semble que vous n'en ayez pas vraiment besoin
--
, car vous pouvez toujours passer./--help
ce qui sera interprété comme un fichier à coup sûr. Mais considérezlorsque vous ne savez pas à l'avance quel est le contenu de la variable. Vous ne pouvez pas simplement y ajouter un préfixe
./
, car il peut s'agir d'un chemin absolu./
qui le briserait. Par contre il peut s'agir d'un fichier nommé--help
(car pourquoi pas?). Dans ce cas,--
est très utile; c'est une commande beaucoup plus robuste:la source
Dans
man bash
, à la fin des options à un caractère, il y a: -Si vous avez cité la commande complète, je ne vois aucune raison de l'utiliser
-
aprèsbash
dans ce cas, mais cela ne fait aucun mal.la source
-
, une exigence peu probable, mais-
/--
permet.cat file1 - file2 > file3
.bash -
signifie quibash
attend stdin. Donc, pratiquement bash exécutera tout ce qui est retourné par la commande qui se trouve à gauche de|
Un exemple similaire mais plus simple serait:
echo hello | cat -
ici,cat
imprimera «bonjour». Pourquoi? Parce que «bonjour» est envoyé au chat|
etcat
attend tout ce qui lui est envoyéMaintenant, divisons la commande entière en deux:
cette commande curl retournera quelque chose qui peut être compris et exécuté par bash
alors nous avons un tuyau
|
qui enverra la sortie retournée par la commande curl vers le côté droit du tuyau, c'est-à-diresudo -E bash -
. Enfinsudo -E bash -
, bash est prêt à exécuter tout ce qui lui est envoyéla source