假设我在 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 脚本的安全问题,但现在让我们忽略所有这些。
source <(curl -s http://mywebsite.com/myscript.txt)
应该这样做。或者,不要对您的初始重定向进行重定向,即重定向标准输入;bash无需重定向即可执行文件名,<(command)语法提供了路径。
bash
<(command)
bash <(curl -s http://mywebsite.com/myscript.txt)
如果你看一下输出可能会更清楚echo <(cat /dev/null)
echo <(cat /dev/null)