0

我想做的是:

  • 以 root 身份登录
  • su postgres
  • psql jumlar < database_schema.txt

这是我的代码。如您所见,我必须一步一步地做这些,我不能在一个命令中完成这两个步骤:

Net::SSH.start(192.168.2.1, root, :password => "root") do |ssh|
  ssh.exec! "su postgres"
  ssh.exec! "psql jumlar < database_schema.txt"

但是,这在 之后不起作用su postgres,因为第二个ssh.exec在第一个之后不会做任何事情。似乎它总是打开一个新的隧道。

我不知道Ruby是否有一个记住每一步的命令?

4

1 回答 1

0

su命令打开一个新的外壳。在第一个命令完成之前,第二个命令不会运行,但在您退出并终止新 shell 之前,第一个命令不会“完成”(然后您将不再处于 postgres 用户的上下文中)。

一种解决方案是使用以下命令作为 postgres 运行所需的命令:

  ssh.exec! "sudo -u postgres 'psql jumlar < database_schema.txt'"

有关详细信息,请参阅sudo 命令

于 2013-06-19T07:32:02.127 回答