Ruby スクリプトでシェル コマンドを実行しようとしています。問題のシェル コマンド ( pg_dump
) は、ユーザーにパスワードの入力を求めます。私がやりたいことは、シェル コマンドを子プロセスで実行し、親プロセスに対話的にパスワードを入力させることです。
ユーザーに表示されないように、親プロセスによってすべてキャプチャされますstdout
。stderr
ここにいくつかのコードがあります。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"
私は何が欠けていますか?助けてくれてありがとう。