用户输入的Bash包装器脚本提示

用户输入的Bash包装器脚本提示,bash,Bash,我有一个bash脚本,它在内部调用Ruby脚本,根据情况,有时候Ruby脚本会提示用户选择;我怎样才能做到这一点 主Bash脚本: #!/usr/bash for host_name in `./myruby.rb -a xxx -b xxx` do echo -e "$host_name" done 包装器myruby.rb #!/usr/bin/ruby ..... ...... puts "enter your selection ?" user

我有一个bash脚本,它在内部调用Ruby脚本,根据情况,有时候Ruby脚本会提示用户选择;我怎样才能做到这一点

主Bash脚本:

#!/usr/bash  
for host_name in `./myruby.rb -a xxx -b xxx`    
do  
    echo -e "$host_name"
done
包装器myruby.rb

#!/usr/bin/ruby  
.....  
......   
puts "enter your selection ?"  
user_selection = $stdin.gets  

如果我直接运行Ruby,它工作得很好,但是当我从bash运行它时,它不会提示用户输入;相反,它是挂起的。

ruby脚本从stdin读取,因此即使从bash调用,您也需要在stdin上提供一些内容。你可以这样做:

$(rubyscript <<< "selection") 

$(rubyscript您的脚本没有挂起;它只是在等待输入。您没有看到提示(我怀疑)因为它是打印到标准输出的,标准输出由反勾号捕获。请注意,前四个主机名将是“enter”、“your”、“selection”和“?”,因为Ruby脚本将其提示符写入标准输出。也许您应该改为将提示符写入标准错误;用户将看到这一点并能够做出响应,提示符将我想,“或者你可以直接键入答案”部分也适用。shell捕获提示符作为前四个主机名,然后等待用户响应。ruby脚本将根据用户输入生成主机名,而且我不能在bacticts上传递参数,因为基于situation ruby脚本会在不提示的时候提示用户输入,我的要求是,如果ruby脚本提示用户输入,我如何在bash脚本上捕获它?