0

私がやりたいことは次のとおりです。

  • ルートとしてログイン
  • su postgres
  • psql jumlar < database_schema.txt

これは私のコードです。ご覧のとおり、これらを段階的に実行する必要がありますが、これら 2 つの手順を 1 つのコマンドで実行することはできません。

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。2 番目は 1 番目の後に機能しないからです。ssh.execいつも新しいトンネルを開いているようです。

Ruby にすべてのステップを記憶するコマンドがあるかどうかはわかりません。

4

1 に答える 1

0

コマンドはsu新しいシェルを開きます。2 番目のコマンドは、最初のコマンドが終了するまで実行されませんが、最初のコマンドは、新しいシェルを終了して終了するまで "終了" しません (その後、postgres ユーザーのコンテキストにいなくなります)。

1 つの解決策は、次を使用して目的のコマンドを postgres として実行することです。

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

詳細については、sudo コマンドを参照してください。

于 2013-06-19T07:32:02.127 に答える