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

同样,我也try 过:

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 <(curl -s http://mywebsite.com/myscript.txt)

如果你看一下echo <(cat /dev/null)的输出可能会更清楚

Linux相关问答推荐

如何确定Linux上的最大静态TLS(线程本地存储)块大小?

git别名函数可以用单引号写吗?

如何更正我的CMakeLists.txt,使我的项目同时构建在Linux和Windows上?

条件句if的正确写法是怎样的?

重命名具有相同前缀的文件对中最旧的文件

如何在 Linux 上使用 -grep 构建过滤间隔的命令

如何在 AWS Linux 服务器上实现虚拟主机?

如何安装脚本以从命令行的任何位置运行?

在 Node.JS 中引用相对于应用程序根目录的文件的正确方法

如何获取 CPU 使用率

用于 GCC/G++ 的宏来区分 Linux 和 Mac OSX?

模拟器在内核映像文件中找不到Linux 版本字符串

Linux命令删除.git文件夹以外的所有文件?

PuTTY:更改默认 SSH 登录目录

我想为 Linux 内核做贡献

在 VIM 中搜索和替换导致尾随字符

如何搜索文件并将它们压缩到一个 zip 文件中

为什么`du`的输出通常与`du -b`如此不同

为什么两次使用 grep 时没有显示输出?

从文件中随机 Select 行而不用 Unix 啜饮它