我有一个脚本,通过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"`
...
答案 0 :(得分:1)
为什么您在发送命令后评论了expect
语句?删除评论并在代码中将其作为
send "$command"
expect "}]}"
发送命令后,我们应始终expect
。否则,Expect
不等待。我们必须让它明确等待。如果问题仍然存在,请在expect中添加-d
标志并发布调试信息。
顺便说一下,当你说它不起作用时,你得到的错误是什么?
答案 1 :(得分:0)
您是否尝试删除使用该变量的send
命令上的引号,如下所示:
...
send $command
...