250 votes

Exécuter le script bash à partir d'une URL

Dire que j'ai un fichier à l'URL "http://mywebsite.com/myscript.txt" qui contient un script:

#!/bin/bash
echo "Hello, world!"
read -p "What is your name? " name
echo "Hello, ${name}!"

Et je tiens à les exécuter ce script sans d'abord l'enregistrer dans un fichier. Comment dois-je faire?

Maintenant, j'ai vu la syntaxe:

bash < <(curl -s http://mywebsite.com/myscript.txt)

Mais cela ne semble pas fonctionner comme il l'aurait fait si je l'ai enregistré dans un fichier, puis exécuté. Par exemple readline ne fonctionne pas, et le résultat est juste:

$ bash < <(curl -s http://mywebsite.com/myscript.txt)
Hello, world!

De même, j'ai essayé:

curl -s http://mywebsite.com/myscript.txt | bash -s --

Avec les mêmes résultats.

A l'origine, j'avais une solution comme:

timestamp=`date +%Y%m%d%H%M%S`
curl -s http://mywebsite.com/myscript.txt -o /tmp/.myscript.${timestamp}.tmp
bash /tmp/.myscript.${timestamp}.tmp
rm -f /tmp/.myscript.${timestamp}.tmp

Mais ce qui semble bâclée, et j'aimerais une solution plus élégante.

Je suis conscient des problèmes de sécurité concernant l'exécution d'un script shell à partir d'une URL, mais nous allons ignorer tout cela pour l'instant.

296voto

geekosaur Points 26170
 source <(curl -s http://mywebsite.com/myscript.txt)
 

devrait le faire. Sinon, laissez la redirection initiale sur la vôtre, qui redirige l'entrée standard; bash prend un nom de fichier pour s'exécuter parfaitement sans redirection, et la syntaxe <(command) fournit un chemin.

 bash <(curl -s http://mywebsite.com/myscript.txt)
 

(Cela peut être plus clair si vous regardez la sortie de

 echo <(cat /dev/null)
 

)

116voto

Anandi Das Points 141

C'est le moyen d'exécuter un script distant en lui passant des arguments (arg1 arg2):

 curl -s http://server/path/script.sh | bash /dev/stdin arg1 arg2
 

16voto

amra Points 4967

Utilisation de wget , qui fait généralement partie de l’installation par défaut du système:

 bash <(wget -qO- http://mywebsite.com/myscript.txt)
 

13voto

Random832 Points 9199

Essayez juste:

 bash <(curl -s http://mywebsite.com/myscript.txt)
 

13voto

luismartingil Points 101

Vous pouvez aussi faire ceci:

 wget -O - https://raw.github.com/luismartingil/commands/master/101_remote2local_wireshark.sh | bash
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X