Скажем, у меня есть файл по URL-адресу "http://mywebsite.com/myscript.txt", который содержит script:
#!/bin/bash
echo "Hello, world!"
read -p "What is your name? " name
echo "Hello, ${name}!"
И я хотел бы запустить этот script, не сохраняя его прежде всего в файле. Как это сделать?
Теперь я видел синтаксис:
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
Но это кажется неряшливым, и мне хотелось бы более элегантное решение.
Я знаю о проблемах безопасности, связанных с запуском оболочки script из URL-адреса, но теперь игнорируем все это.