Linux TCL expect

請問一個有關TCL的expect的問題
expect很好用,在linux底下,可以幫助我們完成一些自動化的工作
但目前有一個需求是
先自動化,中間需要回到手動,然後再回到自動化
目前知道好像有個叫interact可以用,但下了interact之後,
不知如何回到自動化expect下,
所以想請問expect跟interact怎麼切換?
Update: 補充一下,我是要執行某個程式(script)
這個script前面跟後面可以expect來自動化
但中間有些部分,一定要手動完成
而目前不知道如何從expect切至interact,再從interact切回e...
Update 2: 先謝謝你的回答。
這樣是ok,但進入interact mode之後,想再跳回原來的程式
繼續進行expect mode的工作時,該如何做?

另外,我不是寫c++,是要寫linux script ( /bin/sh ),
不過這對於從interact再跳回來的方式應該沒有影響吧?!
Update 3: expect "Username: "
interact {
 "\r" {
  send "\r"
  return
 }
}

"\r"應該是enter的應
Update 4: 該是enter的意思
如果用其它,例如:數字、字母、加減號…等
這一段的意思還是不太懂
能不能解釋一下
經常收到invalid command name的訊息
Update 5: 我用一個\還是不行,我練習的小程式如下
test
----------------------------------
read -p "user=" usr
read -p "password=" pw
echo "user=$usr password=$pw"
---------------------------------------
Update 6: a
------------------------------
#! /usr/bin/expect
spawn ./test
expect
"user="
interact {
  "\r" {
   send "\r"
  return
}
  }
Update 7: expect {
"password=" { send "111111\r" }
}

expect eof
---------------------------------------...
Update 8: 執行expect a,結果如下
spawn ./test
user=asd
invalid command name "usr="
while executing
""user=""
(file "./a" line 4)
[root@EE Desktop]# asd
bash: asd: command not found
[root@EE Desktop]#
Update 9: 把expect和 "user="弄成同一行,執行結果如下:
spawn ./test
user=extra characters after close-quote
while executing
"interact {
  "\\r" {
   send "\\r"
  return
} "
(file "./a" line 4)
Update 10: 檢查出來了!是在第5行少了個空白@@
但如果改成用括號就會都變成手動,滿奇怪的???
更進階的問題…看之後試的情形再向您請教!
Update 11: 搞定範例題之後,開始套用在主要程式
但從interact mode跳回expect mode時,卻沒有成功,出現以下訊息
expect: spawn id exp4 not open
請問是什麼問題?
Update 12: 檢查出來了!
但有新的問題想請教
手動的部分,會一些重複多次且不固定次數的相同訊息
只有1次時,很正常
2次以上,就會出現 command not found的訊息而中止
請問該怎麼修改?
1 answer 1