Digamos que tengo un archivo en la URL "http://mywebsite.com/myscript.txt" que contiene un script:
#!/bin/bash
echo "Hello, world!"
read -p "What is your name? " name
echo "Hello, ${name}!"
Y me gustaría ejecutar este script sin guardarlo primero en un archivo. ¿Cómo hago esto?
Ahora, he visto la sintaxis:
bash < <(curl -s http://mywebsite.com/myscript.txt)
Pero esto no parece funcionar como lo haría si lo guardara en un archivo y luego lo ejecutara. Por ejemplo, readline no funciona, y la salida es solo:
$ bash < <(curl -s http://mywebsite.com/myscript.txt)
Hello, world!
Del mismo modo, he intentado:
curl -s http://mywebsite.com/myscript.txt | bash -s --
Con los mismos resultados.
Originalmente tenía una solución como:
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
Pero esto parece descuidado, y me gustaría una solución más elegante.
Soy consciente de los problemas de seguridad relacionados con la ejecución de un script de shell desde una URL, pero ignoremos todo eso por ahora.
cmd <<foo
es una sintaxis heredoc en la mayoría de los shells y probablemente no sea lo que desea.
mktemp
lugar de lanzar su propia solución