2015-09-10 1 views
0

Я на Ubuntu 14.04 с Ruby 1.9.3. Я пытаюсь представить редактируемый ввод пользователю. Единственное решение, с которым я столкнулся, это использовать команду read из bash-shell: read -e -i «Значение по умолчанию» -p «Prompt>»; echo $ REPLY Выполняется из командной строки, он работает хорошо, отредактированный вход находится в переменной REPLY. Но если я определяюНастоящий редактируемый ввод пользователю с рубином

def edits 
    `read -e -i "Default Value" -p "Prompt> ; echo $REPLY" ` 
end 

и запустить его в рубин я получаю ошибку:

sh: 1: read: Illegal option -e 

Мои вопросы сейчас:

  1. Что пошло не так в моем решении?
  2. Есть ли лучшее решение в рубине?
+0

Естественно, я использовал back-ticks вокруг OS-команды в определении ruby. –

ответ

0

-e флаг для чтения - расширение bash. Вы используете оболочку sh (или что-то эмулирующее sh), которое имеет команду чтения, но не имеет этого флага.

Readline модуль обеспечивает ввод с терминала, при редактировании, внутри Ruby:

require "readline" 
while buf = Readline.readline("> ", true) 
    p buf 
end 

Он также имеет историю и завершения функции.

+0

Мой акцент делается не на подсказке, которую дает readline, но в строке «Значение по умолчанию», которую пользователь может редактировать. Может ли readline отображать такую ​​строку для редактирования? –

+0

Если я определяю def shell 'echo $ SHELL' end, я получаю/bin/bash, поэтому ruby ​​всегда вызывает bash-shell, в котором read -e должен запускаться ??? –

+0

Вы можете вставить текст по умолчанию в предварительный входной сигнал Readline (см. [Здесь] (http://stackoverflow.com/a/29743124/182402)). –

Смежные вопросы