2013-04-22 68 views
0

我需要的红宝石代码线/块执行以下操作:红宝石/ SSH/sqlite3的外壳逸出

  • 开始一个ssh壳给特定用户/主机:[email protected]
  • 有ssh壳开始内在给定的文件sqlite3的会话:/home/dev/current/b/test.sqlite3
  • 执行SQL的给定线:update customers set mode = "Y"

我所有的元素结合在一起。我可以启动ssh shell,我可以让shell启动sqlite3,并且我可以让sqlite3执行一行sql。

我的问题是试图逃避所有不同层次的引号。

而在它被建议之前,sqlite3文件位于不同的服务器上,我不能控制它。我所拥有的是一个ssh用户名/授权密钥。所以使用ruby-sqlite3不是一个选项。

Peter。

+0

我对sqlite并不熟悉。如果你告诉我你试图运行的sqlite3命令,我可以告诉你如何在ssh命令中将其转义。 – dave4420 2013-04-22 17:23:32

+1

@ dave4420 [sqlite3工具](http://www.sqlite.org/sqlite.html)可以作为'sqlite3 /home/dev/current/b/test.sqlite3“运行update customers set mode ='Y' ;''或'echo'更新客户设置模式='Y';“ | sqlite3/home/dev/current/b/test.sqlite3'。 – 2013-04-22 18:18:22

+0

谢谢@CL。 :-) – dave4420 2013-04-22 19:26:49

回答

2
要在远程服务器上运行

Shell命令:要以远程服务器上运行上述命令在本地运行

sqlite3 /home/dev/current/b/test.sqlite3 "update customers set mode = 'Y';" 

Shell命令:

ssh [email protected] \ 
    "sqlite3 /home/dev/current/b/test.sqlite3 \"update customers set mode = 'Y';\"" 

红宝石命令你想运行以运行上面的shell命令:

system "ssh [email protected] \\\n"\ 
     ' "sqlite3 /home/dev/current/b/test.sqlite3 '\ 
      '\\"update customers set mode = \'Y\';\\""' 

(我已经添加了gratuitou (为了避免这些代码示例中的水平滚动),我们不得不使用换行符(并因此无条件地跳过换行符)。