假设我在URL http://mywebsite.example/myscript.txt上有一个包含脚本的文件:

#!/bin/bash
echo "Hello, world!"
read -p "What is your name? " name
echo "Hello, ${name}!"

我希望在不先将其保存到文件的情况下运行该脚本。我怎么做呢?

现在,我已经看到了语法:

bash < <(curl -s http://mywebsite.example/myscript.txt)

但这似乎不像我保存到一个文件,然后执行。例如,readline不工作,输出只是:

$ bash < <(curl -s http://mywebsite.example/myscript.txt)
Hello, world!

同样,我也试过:

curl -s http://mywebsite.example/myscript.txt | bash -s --

同样的结果。

最初我的解决方案是这样的:

timestamp=`date +%Y%m%d%H%M%S`
curl -s http://mywebsite.example/myscript.txt -o /tmp/.myscript.${timestamp}.tmp
bash /tmp/.myscript.${timestamp}.tmp
rm -f /tmp/.myscript.${timestamp}.tmp

但这看起来很草率,我想要一个更优雅的解决方案。

我知道关于从URL运行shell脚本的安全问题,但让我们暂时忽略所有这些问题。


当前回答

bash | curl http://your.url.here/script.txt

实际的例子:

juan@juan-MS-7808:~$ bash | curl https://raw.githubusercontent.com/JPHACKER2k18/markwe/master/testapp.sh


Oh, wow im alive


juan@juan-MS-7808:~$ 

其他回答

你还可以这样做:

wget -O - https://raw.github.com/luismartingil/commands/master/101_remote2local_wireshark.sh | bash

使用wget,它通常是默认系统安装的一部分:

bash <(wget -qO- http://mywebsite.example/myscript.txt)
bash | curl http://your.url.here/script.txt

实际的例子:

juan@juan-MS-7808:~$ bash | curl https://raw.githubusercontent.com/JPHACKER2k18/markwe/master/testapp.sh


Oh, wow im alive


juan@juan-MS-7808:~$ 

Use:

curl -s -L URL_TO_SCRIPT_HERE | bash

例如:

curl -s -L http://bitly/10hA8iC | bash

对于bash, Bourne贝壳和鱼:

curl -s http://server/path/script.sh | bash -s arg1 arg2

标志“-s”使shell从stdin读取。