2015-09-10 63 views
0

我在Ubuntu 14.04上用Ruby 1.9.3。我正試圖向用戶展示可編輯的輸入。 我碰巧找到的唯一解決方案是使用bash-shell中的讀取命令: 請閱讀-e -i「默認值」-p「提示>」; echo $ REPLY 從命令行執行它效果很好,編輯的輸入在REPLY變量中。 但是如果我定義用ruby提供給用戶的可編輯輸入

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

和紅寶石運行它,我得到一個錯誤:

sh: 1: read: Illegal option -e 

我的問題是現在:

  1. 出了什麼問題,我的解決方案?
  2. 在ruby中有更好的解決方案嗎?
+0

當然我在ruby定義中的OS命令周圍使用了back-tick。 –

回答

0

-e用於讀取的標誌是bash擴展名。您正在使用sh外殼(或模擬sh),它具有讀命令但沒有該標誌。

Readline該模塊提供終端輸入與編輯,從內紅寶石:

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

它還具有歷史和完成的功能。

+0

我的重點不在於readline提示的提示,而是關於用戶可以編輯的「默認值」字符串。 readline能顯示這樣一個字符串來編輯嗎? –

+0

如果我定義def shell'echo $ SHELL'結束,我得到/ bin/bash,所以ruby總是調用一個bash-shell,其中讀-e應該運行? –

+0

您可以在Readline的預輸入鉤子中插入默認文本(請參閱[這裏](http://stackoverflow.com/a/29743124/182402))。 –