Скажіть, у мене є файл за URL-адресою "http://mywebsite.com/myscript.txt", який містить сценарій:
#!/bin/bash
echo "Hello, world!"
read -p "What is your name? " name
echo "Hello, ${name}!"
І я хотів би запустити цей скрипт без попереднього збереження його у файл. Як це зробити?
Тепер я побачив синтаксис:
bash < <(curl -s http://mywebsite.com/myscript.txt)
Але це, здається, не працює так, як якщо б я зберег у файл і потім виконав. Наприклад, readline не працює, а вихід просто:
$ bash < <(curl -s http://mywebsite.com/myscript.txt)
Hello, world!
Так само я намагався:
curl -s http://mywebsite.com/myscript.txt | bash -s --
З тими ж результатами.
Спочатку у мене було таке рішення, як:
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
Але це здається неохайним, і я хотів би більш елегантне рішення.
Мені відомі проблеми безпеки щодо запуску скрипта оболонки з URL-адреси, але зараз ігноруємо все це.
cmd <<foo
синтаксис гередока в більшості оболонок і, мабуть, не те, що потрібно.
mktemp
замість того, щоб прокручувати власне рішення