Para enviar um caractere de controle, envie um caractere octal.
send $message
send 2
ou
set ctrlZ 2
send "$message$ctrlZ"
Ref:
Eu configurei um xenserver (grátis) hospedando uma VM (Debian 7.5). Neste xenserver eu anexei um modem GSM serial. Eu configurei o xen para executar o ser2net, então tenho um proxy serial disponível. Isso funciona perfeitamente local e remoto (telnet). Agora, na VM do Debian, estou executando o zenoss e desejo usar a funcionalidade de paginação. Estou criando um script bash para simular a sessão de telnet e enviar uma mensagem. Este script está trabalhando apenas para 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
#...
Executando o script:
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
Estou tendo problemas para enviar o caractere de controle Ctrl + Z para iniciar o envio, ele trava. (nota: o ^ Z é o caractere real inserido com o vi) Além disso, como devo abordar vários destinatários? E como devo sair e desconectar?
EDIT: eu tentei
send "$message^Z";
para
send "$message"^Z;
mas obteve este resultado:
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)
ATUALIZAÇÃO:
#!/usr/bin/expect
# - VAR
set ctrlz 2
set xt 5
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
Tags telnet expect shell-script