2016-07-07 33 views
1

爲了更好地描述我的問題,我有一個Ruby腳本,構建了一個expect腳本,將其寫入到一個文件,與該文件路徑的呼叫#EXEC:ruby​​:在複製流時,如何讓它傳遞輸入字符?

expect /tmp/expectscript 

問題是,我失去控制後,我調用exec ,並且無法清理該文件。我也有證書,所以這是不行的。

我正在嘗試將腳本作爲字符串傳遞給stdin,但這不可能使用ruby + exec,因此我將其重寫爲open3。一切都很順利,直到我看到諸如製表符和退格之類的東西沒有得到正確的處理。這裏是一個複製品:

#!/usr/bin/env 
require 'open3'        
Open3.popen3("expect -") do |i, o, e, t|  
    Thread.start { IO.copy_stream(o, $stdout) } 
    Thread.start { IO.copy_stream(e, $stderr) } 
    i << "spawn bash\ninteract\nwait\nexit\n" 
    Thread.start { IO.copy_stream($stdin, i) } 
    t.value          
end    

現在試着運行這個,寫下「ls」並按下「TAB」。或退格,就此而言。 shell輸出不是自動完成的。

這似乎是copy_stream函數的一個問題,它可能會在複製它們之前處理某些字符。我能做些什麼嗎?

回答

2

找到缺少的部分:

$stdin.raw! 

這並不難畢竟。

+0

還必須注意,這是調用工作所必需的:'''require「io/console」'''' – ChuckE

相關問題