在Ruby中使用管道输入和用户提示输入

时间:2012-03-05 20:26:46

标签: ruby stdin

我目前正在使用一个脚本来定义预期的配置值,读取值的配置文件,最后提示输入预期但未在配置文件中指定的任何值。

预期配置项示例:

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的来源?

1 个答案:

答案 0 :(得分:2)

你试过STDIN.reopen('/dev/tty')吗?我相信这将重新打开STDIN以从键盘而不是从管道读取。