Могу ли я запустить GETS в Ruby-скрипте, запущенном моим Vagrantfile - PullRequest
2 голосов
/ 19 марта 2019

Я новичок в Вагранте и Руби.

Можно ли получить ввод с клавиатуры пользователя в скрипт 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.
Погуглив, я обнаружил, что у других была такая же проблема с Ruby и Bash, но решения не было.

Возможно ли использование get в скрипте ruby, вызываемом из моего Vagrantfile?

У меня есть обходной путь, который заключается в размещении STDIN.gets в Vagrantfile, а не в вызываемом скрипте.

...