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函數的一個問題,它可能會在複製它們之前處理某些字符。我能做些什麼嗎?
還必須注意,這是調用工作所必需的:'''require「io/console」'''' – ChuckE