参数化期望脚本

时间:2015-04-19 20:15:56

标签: bash expect

我有一个脚本,通过tellnet

与一些加热控制器相互作用
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"` 
...

2 个答案:

答案 0 :(得分:1)

为什么您在发送命令后评论了expect语句?删除评论并在代码中将其作为

send "$command"
expect "}]}"

发送命令后,我们应始终expect。否则,Expect不等待。我们必须让它明确等待。如果问题仍然存在,请在expect中添加-d标志并发布调试信息。

顺便说一下,当你说它不起作用时,你得到的错误是什么?

答案 1 :(得分:0)

您是否尝试删除使用该变量的send命令上的引号,如下所示:

...
send $command
...