web-dev-qa-db-fra.com

Que signifie la syntaxe de pipe et de dash de fin?

Disclaimer. Je suis un utilisateur Windows de longue date et je commence tout juste à comprendre le paradigme Linux. Bien qu'enthousiasmé par cela, je comprends que mes formulations pourraient être mal choisies à cause de l'ignorance.

J'ai reçu ne réponse , dont le contenu comprend la ligne suivante, que j'ai besoin d'aide pour interpréter (après un moment de recherche sur Google, j'ai plutôt bien deviné, mais j'aimerais le faire. plus fiable).

curl -sL https://blabla | Sudo -E bash -

Je comprends que nous créons d’abord un appel Web à l’URL blabla , puis (voici la magie du tuyau qui s’ouvre), exécutons une commande avec des privilèges élevés d’administrateur à ouvrir. une nouvelle instance de fenêtre de terminal.

Cependant, lorsque j'essaie de digérer la commande, j'apprends qu'elle équivaut à la séquence suivante.

curl --silent --location https://blabla
Sudo -E bash -

Question 1: Est-ce bien compris?

Plus loin, j'ai essayé de savoir quels étaient les commutateurs de la deuxième ligne et ai utilisé la déclaration comme suit.

man bash | sed -n '/-E/,+1p'

Cependant, je ne vois pas vraiment ce que " - E " est un raccourci pour (est-ce - vide ou est-ce - ou peut-être - err ) et rester bloqué sur l'interprétation. En outre, je ne peux pas comprendre ce que fait le caractère avec tiret seul et je ne sais pas comment le rechercher dans le manuel à l'aide de la déclaration ci-dessus.

Question 2: Comment puis-je rechercher la syntaxe détaillée des commutateurs?

Question 3: Quelle est la signification du caractère tiret sans le commutateur?

7
Konrad Viltersten

La commande pipe (|) signifie prendre le résultat de la commande à gauche et le transmettre comme entrée à la commande à droite. Donc, vous avez presque raison dans votre compréhension de ce que

curl -sL https://blabla | Sudo -E bash -

est-ce que. Ce qui vous manque, c'est de capturer le résultat de la première commande et de le transmettre à la seconde. Ce que vous avez ci-dessus doit ressembler à ceci:

curl --silent --location https://blabla >/tmp/output
Sudo -E bash - </tmp/output

Le tiret (-) à la fin de la deuxième commande indique simplement à bash de lire en standard et de le traiter. Alors,

Sudo -E bash - </tmp/output

est équivalent à

Sudo -E bash </tmp/output

L'option "-E" est en fait associée à Sudo, pas à bash. Lancer la commande:

man Sudo

montre que -E préserve l'environnement.

J'espère que cela aide à clarifier certaines choses pour vous.

Bonne chance pour apprendre Linux! :)

9
Lewis M