Comment passer l'argument au script qui est entré dans bash


10

En ce moment, j'ai une doublure comme celle-ci:

curl -fsSL http://git.io/vvZMn | bash

Il télécharge le script et le passe à bash en tant que fichier stdin. Je voudrais exécuter ce script avec un argument supplémentaire print.

Peut-être quelque chose comme ça?

curl -fsSL http://git.io/vvZMn | bash -- print

Mais ça ne marche pas.


4
Qu'espérez-vous printfaire ici? Afficher les commandes en cours d'exécution? Si oui, essayez bash -x. Remarque: cette curl | bashroutine est un trou de sécurité énorme; vous ne voyez pas ce qui sera exécuté tant que votre serveur n'a pas été mis en marche.
Stephen Harris

Réponses:


16

Je crois que ce que vous recherchez est l' -soption. Avec -s, vous pouvez passer des arguments au script.

Comme exemple factice pour illustrer ceci:

$ echo 'echo 1=$1' | bash -s -- Print
1=Print

Ici, vous pouvez voir que le script fourni sur stdin reçoit le paramètre positionnel Print. Votre script prend un -u UUIDargument et qui peut également être adapté:

$ echo 'echo arguments=$*' | bash -s -- -u UUID print
arguments=-u UUID print

Donc, dans votre cas:

curl -fsSL http://git.io/vvZMn | bash -s -- print

Ou,

curl -fsSL http://git.io/vvZMn | bash -s -- -u UUID print

Comme l'a souligné Stephen Harris, le téléchargement d'un script et son exécution, à perte de vue, est un problème de sécurité.


3

Si votre système possède /dev/stdin, vous pouvez utiliser

$ echo 'echo 1=$1' | bash /dev/stdin print
1=print

Ne faites pas ceci:

$ echo 'echo 1=$1' | bash /dev/stdin -- print
1=--

Si vous souhaitez utiliser --, procédez comme suit:

$ echo 'echo 1=$1' | bash -- /dev/stdin print
1=print
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.