Digamos que eu tenho um arquivo no URL "http://mywebsite.com/myscript.txt" que contém um script:
#!/bin/bash
echo "Hello, world!"
read -p "What is your name? " name
echo "Hello, ${name}!"
E eu gostaria de executar esse script sem primeiro salvá-lo em um arquivo. Como eu faço isso?
Agora, eu vi a sintaxe:
bash < <(curl -s http://mywebsite.com/myscript.txt)
Mas isso não parece funcionar como se eu salvasse em um arquivo e depois o executasse. Por exemplo, o readline não funciona e a saída é apenas:
$ bash < <(curl -s http://mywebsite.com/myscript.txt)
Hello, world!
Da mesma forma, eu tentei:
curl -s http://mywebsite.com/myscript.txt | bash -s --
Com os mesmos resultados.
Originalmente, eu tinha uma solução 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
Mas isso parece desleixado e eu gostaria de uma solução mais elegante.
Estou ciente dos problemas de segurança relacionados à execução de um shell script a partir de uma URL, mas vamos ignorar tudo isso por enquanto.
cmd <<foo
é a sintaxe heredoc na maioria das conchas e provavelmente não é o que você deseja.
mktemp
em vez de rolar sua própria solução