2015-04-19 85 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