2013-04-22 64 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 (爲了避免這些代碼示例中的水平滾動),我們不得不使用換行符(並因此無條件地跳過換行符)。