我可以在由Vagrantfile运行的Ruby脚本中运行GETS

时间:2019-03-19 05:34:28

标签: ruby vagrant gets

我是Vagrant和Ruby的新手。

是否有可能使用户键盘输入到我从Vagrantfile触发的红宝石脚本中:

config.trigger.after [:provision] do |trigger|  
  trigger.run = {inline: "C:/HashiCorp/Vagrant/embedded/mingw64/bin/ruby app/scripts/test.rb"}  
end

我的主机是Windows 10,我的访客是Bento \ ubuntu-18.10。
我已经成功创建了在Virtualbox中运行的计算机。

我尽可能简化了test.rb。

此代码:

#!/usr/bin/ruby  

puts "enter selection"  
puts "xrestore"  

按我的预期返回此值:

c:\Users\neile\Documents\development\vagrant\bento\ubuntu-18.10-mysql>vagrant provision  
==> vm1: [vagrant-hostsupdater] Checking for host entries  
==> vm1: Running action triggers after provision ...  
==> vm1: Running trigger...  
    vm1: Running local: Inline script  
    vm1: C:/HashiCorp/Vagrant/embedded/mingw64/bin/ruby app/scripts/restore-db.rb  
    vm1: enter selection  
    vm1: xrestore  
c:\Users\neile\Documents\development\vagrant\bento\ubuntu-18.10-mysql>  

此代码:

#!/usr/bin/ruby  

puts "enter selection"  
STDOUT.flush()  
xrestore = STDIN.gets.chomp  
puts "xrestore"  

返回此:

>vagrant provision  
==> vm1: [vagrant-hostsupdater] Checking for host entries  
==> vm1: Running action triggers after provision ...  
==> vm1: Running trigger...  
    vm1: Running local: Inline script  
    vm1: C:/HashiCorp/Vagrant/embedded/mingw64/bin/ruby app/scripts/restore-db.rb  
    vm1: enter selection  

没有提示输入变量值:xrestore
并且处理似乎停止了。

要终止该过程,请输入Ctrl-C两次。

如果我忽略了:STDOUT.flush()
我什至没有得到提示“输入选择”

我尝试将路径ruby.exe放在系统环境变量PATH中,并从trigger.run语句中删除该路径。
这将产生与上述相同的结果。

(顺便说一句,我尝试使用bash脚本执行此操作,并且bash read语句也存在类似问题。
谷歌搜索,我发现其他人在Ruby和Bash上也有相同的问题,但没有解决方案。)

是否甚至可以在Vagrantfile调用的ruby脚本中使用“ gets”?

我确实有一种解决方法,即将STDIN.gets放在Vagrantfile中,而不是在被调用的脚本中。

0 个答案:

没有答案