Exécuter script bash à partir de l'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 j'aimerais exécuter ce script sans d'abord l'enregistrer dans un fichier. Comment puis-je faire cela?

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.

À 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 cela 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.

  • Si vous ne finissent par créer un fichier temporaire, vous devriez probablement utiliser des mktemp au lieu de rouler votre propre solution
  • cmd <<foo est syntaxe heredoc dans la plupart des coquilles et probablement pas ce que vous voulez.
InformationsquelleAutor Tristan | 2011-04-20