从URL执行bash脚本

假设我在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 -- 

有了同样的结果。

最初我有一个解决scheme,如:

 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 

但是,这似乎马虎,我想要一个更优雅的解决scheme。

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

 source <(curl -s http://mywebsite.com/myscript.txt) 

应该这样做。 或者,不要在你的初始redirect,这是redirect标准input; bash需要一个文件名来执行而不用redirect, <(command)语法提供了一个path。

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

如果你看echo <(cat /dev/null)的输出,

这是通过传递一些参数(arg1 arg2)来执行远程脚本的方法:

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

对于bash:

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

Bourne shell还支持“-s”从标准input读取。

尝试只是:

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

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

 bash <(wget -qO- http://mywebsite.com/myscript.txt) 

你也可以这样做:

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

最好的办法是

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

这是@ user77115的一个小小的改变

只要结合amra和user77115的答案:

 wget -qO- https://raw.githubusercontent.com/lingtalfi/TheScientist/master/_bb_autoload/bbstart.sh | bash -s -- -v -v 

它执行bbstart.sh遥远的脚本,传递-v -v选项。

curl -s -L URL_TO_SCRIPT_HERE | 庆典

例如::

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

我经常用下面就足够了

 curl -s http://mywebsite.com/myscript.txt | sh 

但是在一个旧的系统(kernel2.4)中,遇到了问题,下面的方法可以解决它,我尝试了很多其他方法,只有下面的工作

 curl -s http://mywebsite.com/myscript.txt -o a.sh && sh a.sh && rm -f a.sh 

例子

 $ curl -s someurl | sh Starting to insert crontab sh: _name}.sh: command not found sh: line 208: syntax error near unexpected token `then' sh: line 208: ` -eq 0 ]]; then' $ 

这个问题可能是由于networking速度慢导致的,或者是bash版本过于老旧,无法正常处理networking缓慢

但是,下面解决了这个问题

 $ curl -s someurl -o a.sh && sh a.sh && rm -f a.sh Starting to insert crontab Insert crontab entry is ok. Insert crontab is done. okay $ 

也:

 curl -sL https://.... | sudo bash -