0

我需要一行/块 ruby​​ 代码来执行以下操作:

  • 向特定用户/主机启动 ssh shell:dev@localhost
  • 在该 ssh shell 中,在给定文件上启动 sqlite3 会话:/home/dev/current/b/test.sqlite3
  • 执行给定的 sql 行:update customers set mode = "Y"

我将所有元素放在一起。我可以启动 ssh shell,我可以让 shell 启动 sqlite3,我可以让 sqlite3 执行一行 sql。

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

在它被建议之前,sqlite3 文件位于不同的服务器上,我无法控制。我只有一个 ssh 用户名/身份验证密钥。所以使用 ruby​​-sqlite3 不是一个选项。

彼得。

4

1 回答 1

2

要在远程服务器上运行的 Shell 命令:

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

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

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

您要运行的 Ruby 命令以运行上述 shell 命令:

system "ssh dev@localhost \\\n"\
       '  "sqlite3 /home/dev/current/b/test.sqlite3 '\
            '\\"update customers set mode = \'Y\';\\""'

(我添加了无偿换行符(因此无偿转义换行符)以避免在这些代码示例中水平滚动。)

于 2013-04-22T19:26:20.140 回答