我目前正在使用一个脚本来定义预期的配置值,读取值的配置文件,最后提示输入预期但未在配置文件中指定的任何值。
预期配置项示例:
username password command directories
配置文件示例:
username:bob
command:"rm -rf / && echo bwahahahahaha"
示例提示:
password? userinput
directories? userinput
问题的关键在于,并非所有配置项在运行时之前都是已知的,并且可以从文本文件或其他程序的输出中传输,但仍可能在配置项中留下间隙(触发提示)。
[host]$ parametergeneratingscript.rb | paramaterreceivingscript.rb # still needs to prompt for password
使用IO#tty?在我能够检测到管道输入并从STDIN中正确读取,但这遍及用户提示(也来自STDIN)。我很乐意改变配置/提示方案,但是在我跑掉并核实它之前,想知道是否有一种优雅的方式在tty和管道输入之间“切换”STDIN的来源?
答案 0 :(得分:2)
你试过STDIN.reopen('/dev/tty')
吗?我相信这将重新打开STDIN以从键盘而不是从管道读取。