9

ユーザーの応答を求めるコマンドをコマンドラインで実行する必要があります。それが役立つ場合、コマンドは次のとおりです。

gpg --recipient "Some Name" --encrypt ~/some_file.txt

これを実行すると、何かについて警告し、次のように尋ねます。

とにかくこのキーを使用しますか? (y/N)

「y」と応答して、正しく終了しましょう。open4 gemを使用しようとしましたが、'y' を正しく指定することができませんでした。これが私が試したものです:

Open4::popen4(cmd) do |pid, stdin, stdout, stderr|
  stdin.puts "y"
  stdin.close

  puts "pid        : #{ pid }"
  puts "stdout     : #{ stdout.read.strip }"
  puts "stderr     : #{ stderr.read.strip }"
end

私は何を間違っていますか?私がしていることは可能ですか?

4

2 に答える 2

10

これらの状況を処理するUnixの方法は、reexpectを使用することです。これには、Rubyに次のサポートが組み込まれています。

require 'pty'
require 'expect'

PTY.spawn("your command here") do |reader, writer|
  reader.expect(/Use this key anyway/, 5) # cont. in 5s if input doesn't match
  writer.puts('y')
  puts "cmd response: #{reader.gets}"
end
于 2012-05-18T00:54:26.033 に答える
4

gpgユーザーに質問するために端末デバイスを直接開いている可能性があります。これは、ファイルからスクリプトを完全に実行することを防ぐための一般的な安全アプローチです。(同様のものについては、現在非推奨のgetpass(3)ルーチンを参照してください。)

警告を読むほど気にしない場合は、gpgコマンド ライン オプションを使用することもでき--yesます。

   --yes  Assume "yes" on most questions.
于 2012-05-18T00:24:22.077 に答える