Angenommen, ich habe eine Datei unter der URL "http://mywebsite.com/myscript.txt", die ein Skript enthält:
#!/bin/bash
echo "Hello, world!"
read -p "What is your name? " name
echo "Hello, ${name}!"
Und ich möchte dieses Skript ausführen, ohne es zuvor in einer Datei zu speichern. Wie mache ich das?
Jetzt habe ich die Syntax gesehen:
bash < <(curl -s http://mywebsite.com/myscript.txt)
Dies scheint jedoch nicht so zu funktionieren, als würde ich es in einer Datei speichern und dann ausführen. Zum Beispiel funktioniert readline nicht und die Ausgabe ist nur:
$ bash < <(curl -s http://mywebsite.com/myscript.txt)
Hello, world!
Ebenso habe ich versucht:
curl -s http://mywebsite.com/myscript.txt | bash -s --
Mit den gleichen Ergebnissen.
Ursprünglich hatte ich eine Lösung wie:
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
Aber das scheint schlampig, und ich hätte gerne eine elegantere Lösung.
Ich bin mir der Sicherheitsprobleme beim Ausführen eines Shell-Skripts über eine URL bewusst, aber lassen Sie uns dies alles vorerst ignorieren.
cmd <<foo
ist Heredoc-Syntax in den meisten Shells und wahrscheinlich nicht das, was Sie wollen.
mktemp
anstatt Ihre eigene Lösung zu