2015-04-19 121 views
2

我有一個通過tellnet參數化expect腳本

1 | #!/usr/bin/expect 
2 | set timeout 10 
3 | set ip [lindex $argv 0]; 
4 | set port [lindex $argv 1]; 
5 | log_file [lindex $argv 2]; 
6 | spawn telnet $ip $port 
7 | expect "'^]'." 
8 | sleep .1 
9 | send "{\"INFO\":0}\0\r" 
10| expect "}]}" 
11| send "\35" 
12| expect "telnet>" 
13| send "q\r" 
14| interact 

這工作得很好,但我想參數化線9,但儘管我盡了最大努力,我不能讓它工作與一些加熱控件交互的腳本。這必須要看逃生如何運作。

理想的情況下我的新腳本如下所示:

#!/usr/bin/expect 
set timeout 10 
set ip [lindex $argv 0]; 
set port [lindex $argv 1]; 
log_file [lindex $argv 2]; 
set command [lindex $argv 3]; 
send_user $command; 
spawn telnet $ip $port 
expect "'^]'." 
sleep .1 
send "$command" 
expect "}]}" 
sleep .1 
send "\35" 
expect "telnet>" 
send "q\r" 
interact 

,我會從像bash腳本調用它:

BASE_PATH=/usr/share/testing 
LOG=$BASE_PATH/telnet.log 
IP=10.10.10.5 
PORT=4242 
COMMAND="{\\\"INFO\\\":0}\0\r" 

A_TEMP=`$BASE_PATH/telnet.sh $IP $PORT $LOG "$COMMAND"` 
... 

回答

0

您是否嘗試過在使用該變量的send命令去掉引號,像這樣:

... 
send $command 
... 
1

爲什麼你評論了expect聲明發送命令後?刪除註釋,並有在你的代碼

send "$command" 
expect "}]}" 

發送命令後,我們應該始終expect的東西。否則,Expect不會等待。我們必須明確地等待。如果問題仍然存在,請添加-d標誌併發布調試信息。

順便說一下,當你說它不工作,你得到的錯誤是什麼?

+0

抱歉#錯誤地張貼了。 – user3262302

+0

好的。如何調試信息?你可以發佈嗎? – Dinesh