ser2netのTelnetセッションを実行するためのシェルスクリプト

ser2netのTelnetセッションを実行するためのシェルスクリプト

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"

引用:

おすすめ記事