我想做的是:
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是否有一个记住每一步的命令?
答案 0 :(得分:0)
su
命令打开一个新shell。第二个命令在第一个命令完成之前不会运行,但是第一个命令将不会“完成”,直到你退出并终止新的shell(然后你将不再在postgres用户的上下文中)。 / p>
一种解决方案是使用以下命令以postgres的形式运行所需的命令:
ssh.exec! "sudo -u postgres 'psql jumlar < database_schema.txt'"
有关详细信息,请参阅sudo command。