【发布时间】:2011-08-09 18:58:24
【问题描述】:
假设我在 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 运行 shell 脚本的安全问题,但现在让我们忽略所有这些。
【问题讨论】:
-
如果您最终创建了一个临时文件,您可能应该使用
mktemp而不是滚动您自己的解决方案 -
cmd <<foo是大多数 shell 中的 heredoc 语法,可能不是您想要的。