用于执行到 ser2net 的 telnet 会话的 Shell 脚本

用于执行到 ser2net 的 telnet 会话的 Shell 脚本

我已经设置了一个 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"

参考:

相关内容