我已经设置了一个 xenserver(免费)来托管 VM(Debian 7.5)。在这个 xenserver 上我连接了一个串行 GSM 调制解调器。我已将 xen 配置为运行 ser2net,因此我有一个可用的串行代理。这在本地和远程(telnet)上都可以完美地工作。现在,我在 Debian VM 上运行 zenoss,并且希望使用分页功能。我正在创建一个 bash 脚本来模拟 telnet 会话并发送消息。该脚本仅适用于 50%。
#!/usr/bin/expect
set timeout 20
set number [lindex $argv 0]
set message [lindex $argv 1]
spawn telnet 10.10.0.52 3333
#wait?
sleep 1
send AT+CMGS="$number"\r;
expect ">"
send "$message^Z";
interact
#...
运行脚本:
administrator@debian:/home/zenoss$ ./sms.sh +32486000000 xxen
spawn telnet 10.10.0.52 3333
Trying 10.10.0.52...
Connected to 10.10.0.52.
Escape character is '^]'.
AT+CMGS="+32486000000"
> xxen^Z
Ctrl我在发送控制字符+Z来启动发送时遇到问题,它挂起。(注:^Z是vi插入的真实字符)另外,我应该如何处理多个收件人?我应该如何退出并断开连接。
编辑:我尝试过
发送“$message^Z”;
到
发送“$消息”^Z;
但得到这个结果:
administrator@debian:/home/zenoss$ ./sms.sh +32486000000 xxen
spawn telnet 10.10.0.52 3333
Trying 10.10.0.52...
Connected to 10.10.0.52.
Escape character is '^]'.
AT+CMGS="+32486000000"
> extra characters after close-quote
while executing
"send "$message"^Z;
interact
#...
"
(file "./sms.sh" line 10)
更新:
#!/usr/bin/expect
# - VAR
set ctrlz \032
set xt \135
set timeout 15
set host [lindex $argv 0]
set port [lindex $argv 1]
set number [lindex $argv 2]
set message [lindex $argv 3]
# - CONNECT
spawn telnet $host $port
sleep 1
# - SEND
send AT+CMGS="$number"\r;
expect ">"
send "$message$ctrlz";
expect "OK"
# - END
答案1
要在 Expect 中发送控制字符,请发送八进制字符。
send $message
send \032
或者
set ctrlZ \032
send "$message$ctrlZ"
参考: