【问题标题】:Bash wrapper script prompt for user input用于用户输入的 Bash 包装脚本提示
【发布时间】:2013-01-30 10:10:41
【问题描述】:

我有一个内部调用 Ruby 脚本的 bash 脚本,根据情况,有时 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 运行它时,它不会提示用户输入;而是挂了。

【问题讨论】:

  • 您的脚本没有挂起;它只是在等待输入。您看不到提示(我怀疑),因为它被打印到标准输出,由反引号捕获。
  • 请注意,前四个主机名将是 'enter'、'your'、'selection' 和 '?'因为您的 Ruby 脚本会将其提示符写入标准输出。也许您应该将提示写入标准错误;用户将看到并能够响应,并且提示也不会被反引号捕获。

标签: bash


【解决方案1】:

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

$(rubyscript <<< "selection") 

$() 结构与反引号相同

或者您可以在 bash 脚本“挂起”时自己输入答案

【讨论】:

  • 我认为“或者你可以只输入答案”部分适用。 shell 将提示作为前四个主机名捕获,然后等待用户响应。
  • ruby 脚本将根据用户输入生成主机名,而且我无法在 bactts 上传递参数,因为根据情况 ruby​​ 脚本会在一段时间内提示用户输入' t 提示,我的要求是如果用户输入的 ruby​​ 脚本提示我如何在 bash 脚本上捕获它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-01
  • 1970-01-01
  • 2020-09-03
  • 2016-03-19
  • 2023-03-04
  • 2016-11-18
  • 1970-01-01
相关资源
最近更新 更多