9

我需要在命令行上运行一个要求用户响应的命令。如果它有帮助,命令是:

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

当你运行它时,它会发出警告,然后询问:

还是使用这个键?(是/否)

响应'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 方法是使用expect,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 回答