2011-09-09 54 views
1

一個新的轉折有所常見的問題進行合作:Rlwrap似乎並沒有與「讀-e」

在我的交互式腳本我預先填寫用戶輸入像這樣:

#process_line.sh 

INPUT=$1 # previous value 
read -e -p "> " -i "$INPUT" INPUT 

要執行命令歷史記錄我打電話process_line.sh

rlwrap ./process_line.sh $INPUT 

現在這裏的扭曲:如果我有"read -e"選擇,我可以編輯預填充輸入,但沒有命令歷史記錄,並不利,我可以有命令歷史,禮貌rlwrap,沒有"read -e"選項,但沒有預填充(即"read -i"沒有真正做任何事情)。

的問題,當然,是我是否能在同一時間有兩個輸入預填充和編輯和命令歷史記錄。

謝謝!

回答

2

關閉-e進行閱讀。然後這兩個readline實現不會發生衝突。

要獲得提示,您可以通過-S "> "到rlwrap。

+0

如果我關閉'-e',那麼我將失去輸入編輯。不知道你的'-S'的意思,似乎沒有有效選項(Cygwin的,bash的版本4.1.10) –

+0

rlwrap支持在線編輯直接(和rlwrap具有-s參數 - 實現我的反應wasnt明確) –

+0

對不起,'-S'對我不起作用: 'rlwrap:error:unknown option - S 嘗試'rlwrap --help'以獲取更多信息' 您是不是認爲它應該看起來像這樣? 'rlwrap -S $ INPUT。/ process_line.sh' –

1

這個用例已經在0.25版本以後的rlwrap手冊中;究竟該如何去做,取決於rlwrap版本。

在rlwrap 0.37你做這樣的:

INPUT = $(rlwrap -o -S 「>」 -P $ INPUT貓)

這種方法的優點是,每一個輸入變量可以給予自己的歷史和完成列表(使用-f和-H選項)

cygwin的版本(0.24)確實是古老的,但編譯rlwrap自己應該是​​無痛的。如果你想建立一個靜態鏈接的版本(請參閱INSTALL文件中的說明)並將其與腳本一起分發。

+0

我加深了一些,並且讓我的朋友(他實際上正在爲生活編程)幫助我在Python中實現它。如果有的話,這將有助於可移植性,並增加了在此之上粘貼GUI的可能性。我意識到,這可能是一種比分發符合腳本的編譯腳本更復雜的解決方案,但是因爲我將其作爲愛好我不介意!不管怎麼說,還是要謝謝你! –