"Http://mywebsite.com/myscript.txt" URL'sinde bir komut dosyası içeren bir dosyam olduğunu varsayalım:
#!/bin/bash
echo "Hello, world!"
read -p "What is your name? " name
echo "Hello, ${name}!"
Ve bu komut dosyasını önce bir dosyaya kaydetmeden çalıştırmak istiyorum. Bunu nasıl yaparım?
Şimdi sözdizimini gördüm:
bash < <(curl -s http://mywebsite.com/myscript.txt)
Ancak bu, bir dosyaya kaydedip yürüttüğümde çalıştığı gibi görünmüyor. Örneğin readline çalışmaz ve çıktı sadece:
$ bash < <(curl -s http://mywebsite.com/myscript.txt)
Hello, world!
Benzer şekilde denedim:
curl -s http://mywebsite.com/myscript.txt | bash -s --
Aynı sonuçlarla.
Başlangıçta şöyle bir çözüm vardı:
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
Ama bu özensiz görünüyor ve daha zarif bir çözüm istiyorum.
Bir URL'den kabuk komut dosyası çalıştırmayla ilgili güvenlik sorunlarının farkındayım, ancak şimdilik bunları göz ardı edelim.
cmd <<foo
çoğu kabuklarda heredoc sözdizimi olup muhtemelen istediğiniz şey değildir.
mktemp
kendi çözümünüzü kullanmak yerine kullanmalısınız