我需要在命令行上运行一个命令,要求用户响应。万一它有助于命令:
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
我做错了什么?我正在做什么甚至可能?
答案 0 :(得分:9)
用于处理这些情况的Unix方法是使用expect,Ruby附带built-in support用于:
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
答案 1 :(得分:4)
gpg
可能直接打开终端设备向用户询问问题 - 这是一种常见的安全方法,可以防止脚本完全从文件中驱动。 (有关类似内容,请参阅现已弃用的getpass(3)
例程。)
如果您对警告没有足够的关注来阅读它,您也可以使用gpg
命令行选项--yes
:
--yes Assume "yes" on most questions.