2010-11-08 76 views
0

所以这是一个奇怪的请求,但希望这里有人知道一些命令行fu。我们可以看到,可能还必须发布到serverfault。将curl请求的结果传递给mysql命令行

我想弄清楚如何将curl请求的结果传递给mysql命令行应用程序。所以基本上有点像这样 -

mysql --user=root --password=my_pass < (curl http://localhost:3000/application.sql) 

其中该URL基本上返回一个带有sql语句的文本响应。

一些背景:

我开发的应用程序支持多种安装,作为一个新的实例,我们分拆了我们的“数据”数据库的副本为新实例的安装过程的一部分。

我试图尽可能地自动化部署过程,所以我在rails中构建了一个小的“仪表板”应用程序,可以为每个实例生成sql语句,配置文件等,还可以帮助我们查看有关实例和其他有趣的东西。现在我正在写capistrano任务,根据我作为变量传入的安装ID实际进行部署。

初始部署设置包括创建此SQL请求将执行的应用程序数据库。理论上,我可以在wget请求中提取文件,执行并删除它,但我认为只要告诉远程服务器请求并一步执行它就会更清洁。

那么有什么想法?

回答

2

我相当肯定您的语法原本不会工作,因为'<'需要一个文件。相反,你需要管道curl的输出,默认情况下,它将输出到STDOUT到mysql。 我相信以下内容适合你。

curl http://localhost:3000/application.sql | mysql --user=root --password=my_pass 
+0

工作就像一个魅力。谢谢。 – JoshReedSchramm 2010-11-08 03:04:47

2

在bash中,你可以做进程替换:

mysql ... < <(curl ...) 
+0

我不知道你能做到这一点,那很整齐。 – Danny 2010-11-09 13:02:54