expect腳本中設置超時,好比下面的腳本
文件expect_ssh_scp.sh
#!/usr/bin/expect #表示使用expect解釋器
set timeout 10 #設置超時限制爲10秒
spawn ssh userName@hremote_host command #經過ssh鏈接遠程主機執行命令
expect { #第一個expect語句
"(yes/no)" {send "yes\r";exp_continue}
"*assword:" {send "password\r"}
}
expect eof #指明命令交互結束
spawn scp source userName@hostName:dest #經過scp複製遠程電腦的文件到本地
expect { #第二個expect語句
"(yes/no)" {send "yes\r";exp_continue}
"*assword:" {send "password\r"}
}
expect 100%
expect eof
exit
我想知道這個超時10秒,是對全部的expect語句有效,仍是隻針對第一個啊?
若是超時限制對下面全部的expect語句都有效,好比下面的scp遠程複製命令,若是數據沒傳輸完,程序就超時了,那怎麼解決呢?
那樣的話expect 100%這句代碼又有什麼做用??
我看到一種解釋是:代碼剛開始設定了timeout的時間爲10秒,若是在執行scp任務時遇到了代碼中沒有指定的異常,則在等待10秒後該腳本的執行會自動終止。這樣理解對嗎?
幹嗎要這個超時限制啊,感受很影響程序的效率,在執行過程當中碰見問題就返回問題信息,退出不就行了麼,就算多給10秒,還不是無法解決。就比如Java中的異常處理機制,碰見異常就,throw catch處理嘛,而後程序繼續執行,這樣多好,
若是某一個方法很是耗時,那麼就等它執行完唄,就算有一天,出現無限循環這種永遠的執行不完的方法,設定一個超時,這樣的邏輯感受不對吧,出現無窮循環的問題明顯是設計的問題ssh
廠家直銷特大碼男鞋新款皮鞋正裝韓版男士休閒皮鞋男鞋商務鞋代發spa