VM(Debian 7.5)をホストするためにxenserver(無料)を設定しました。このxenserverにはシリアルGSMモデムを接続しました。 ser2netを実行するようにxenを設定したので、シリアルエージェントを使用できます。これはローカルとリモート(Telnet)の両方で完全に機能します。これでDebian VMでzenossを実行しており、ページング機能を使用したいと思います。 Telnetセッションをシミュレートしてメッセージを送信するbashスクリプトを作成しています。このスクリプトは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
CtrlZ送信を開始するために制御文字+の送信に問題があり、中断されます。(注:^Zはviが挿入した実際の文字です)また、複数の受信者をどのように処理する必要がありますか?シャットダウンして切断するにはどうすればよいですか?
編集:私は努力しました
"$メッセージ^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で制御文字を送信するには、8進文字を送信します。
send $message
send \032
または
set ctrlZ \032
send "$message$ctrlZ"
引用: