2010-09-19 44 views
0

當我用期待交互這樣它的偉大工程:期待的偉大工程交互但不能從文件

[email protected]:/home/vagrant> expect -i 
expect1.1> spawn screen -x 
spawn screen -x 
3195 
expect1.2> send "ls\n" 
expect1.3> exit 

但在文件中使用相同的命令:

spawn screen -x 
send "ls\n" 
exit 

只有作品有時,例如。每次我執行文件時,都會有1/10的時間。這真的很奇怪。

我執行的文件使用此命令:

expect -f Expectfile 

我也測試過這些:

expect -b Expectfile 
expect Expectfile 

,但我得到了同樣的錯誤。

它什麼也沒說。另一個屏幕(因爲我使用「屏幕」命令)只有一段時間纔會響應。有人知道爲什麼

+1

你不會說錯誤究竟是什麼。這將有助於*很多*。 – 2010-09-19 20:12:28

+0

我試試這個,當你在'expect'結尾添加。*「'它有效。 – jcubic 2010-09-19 20:46:46

回答

4

我希望你使用ls來代替別的東西,因爲如果你只是想要一個本地的文件列表,你最好使用glob命令。當然,你可能實際上正在做類似的事情,使用screen -x也是如此,但是現在我覺得它有點過於複雜了。

可能的失敗(雖然我因爲缺乏證據而在黑暗中拍攝)可能是使用虛擬終端的各種事物之間的相互作用(期望和屏幕都會這樣做,而且沒有太多可用的虛擬終端可用系統範圍內)或由於沒有足夠時間來重新建立會話連接而導致某種時間問題。 (雖然10次失敗9次?這很多。)如果是時間問題,插入after 500將有所幫助。如果是終端的數量,你就會遇到問題;也許可以用像lsof這樣的工具來發現這個問題,但是有很多移動部件,我不知道什麼是失敗的。

1

爲什麼?因爲你錯用了Expect。

我不相信,一個stackoverflow線程是一個有效的媒介,教你什麼你錯過了期待。更好的起點可能是這樣的:爲什麼你認爲你應該使用Expect?如果您似乎嘗試自動化屏幕,則最好使用核心Tcl,而不是Tcl的Expect擴展。

屏幕很棒,Expect很棒,我總是贊成自動化。您提供的特定組合聽起來比可能需要的更復雜。

相關問題