1

Ruby スクリプトでシェル コマンドを実行しようとしています。問題のシェル コマンド ( pg_dump) は、ユーザーにパスワードの入力を求めます。私がやりたいことは、シェル コマンドを子プロセスで実行し、親プロセスに対話的にパスワードを入力させることです。

ユーザーに表示されないように、親プロセスによってすべてキャプチャされますstdoutstderr

ここにいくつかのコードがあります。Open4 がstdoutシェル コマンドからキャプチャできることを示すだけです。残念ながら、それは行っていません。

puts "Executing \"#{pg_dump_command}\""

stdin = ''
stdout = ''
stderr = ''

thread = Open4::background(pg_dump_command, 0 => stdin, 1 => stdout, 2 => stderr)

while(status = thread.status)
  puts '.'

  sleep 1
end

puts "STDOUT: #{stdout}"
puts "STDERR: #{stderr}"

これが出力です。Open4 にはstdout.

Executing "pg_dump -U myuser -Fc mydb > /tmp/db.dump"
.
Password: .
.
(the dots continue for as long as a password is not entered)
STDOUT: 
STDERR: pg_dump: [archiver (db)] connection to database "mydb" failed: FATAL:  password authentication failed for user "myuser"

私は何が欠けていますか?助けてくれてありがとう。

4

0 に答える 0