Disons 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 si j'avais enregistré dans un fichier puis exécuté. Par exemple, readline ne fonctionne pas et la sortie 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é, et j'aimerais une solution plus élégante.
Je suis conscient des problèmes de sécurité liés à l'exécution d'un script shell à partir d'une URL, mais ignorons tout cela pour le moment.
cmd <<foo
est la syntaxe heredoc dans la plupart des shells et probablement pas ce que vous voulez.
mktemp