diegoneto
(usa Outra)
Enviado em 08/02/2012 - 16:04h
Saudações a todos,
Tenho um script utilizando o Expect que acessa os elementos da minha rede por telnet, executa alguns comandos e sai. Em um dos comandos eu não preciso esperar até o final do prompt para sair do telnet e encerrar o expect e como leva um certo tempo eu receber toda a resposta do comando.
Hj eu consigo sair do except e continuar o resto do meu script, mas o telnet continua rodando e consumindo recurso da máquina. Gostaria de saber se há alguma forma de, durante a resposta do comando, eu encerrar a conexão do telnet. Meio q "hard exit". Imagino q seria algo como "Ctrl+C" em hexadecimal, mas já tentei e não tive sucesso.
Segue abaixo o script do expect:
#!/usr/bin/expect -f
set timeout 60
# timeout da função do expect
set OSS_Nome [lindex $argv 0]
# Nome da OSS
set OSS_IP [lindex $argv 1]
# IP da OSS
set OSS_Porta [lindex $argv 2]
# Porta de acesso da OSS
set OSS_User [lindex $argv 3]
# Usuário que será logado na OSS
set OSS_Pass [lindex $argv 4]
# Senha do usuário que será logado na OSS
set MSC_HLR_Nome [lindex $argv 5]
# MSC/HLR onde serão executados os comandos
set Comando_Nome [lindex $argv 6]
# Comando a ser executado no elemento da OSS (comando completo)
spawn telnet $OSS_IP $OSS_Porta
# Executa o telnet para acessar a OSS através do IP e porta indicados
expect "Userid:$" {
# Espera o texto Userid:
# As chaves no final da linha é para caso a OSS estiver offline
send "$OSS_User\n"
# Envia o nome do usuário para logar na OSS
expect "Password:$"
# Espera o texto Password:"
send "$OSS_Pass\n"
# Envia a senha do usuário para logar na OSS
expect "NE:$"
# Espera o texto NE:
send "NE=$MSC_HLR_Nome\n"
# Envia o nome do elemento para entrarmos nele e executar o comando
expect "<"
# Espera o prompt para enviar o comando desejado
send "$Comando_Nome;\n"
# Envia o nome do comando desejado
if { "$Comando_Nome" == "SYRIP:LOG" } {
expect "<"
send -- \x4
# Envia o comando "Ctrl+D" em hexadecimal para a MSC
expect "SUMMARY VIEW OF EVENTS FOR THE LAST 12 MONTHS"
# A informação desse texto não é importante
# "HARD EXIT" NESSE PONTO.
return 0
# Retorna 0 para a variável $? no script pai indicando que o script teve sucesso
expect eof
} else {
expect "<"
# Espera o final do comando e o novo prompt
interact
send "QUIT;\n"
# Encerra a conexão com o OSS
expect "Connection"
# Espera a resposta do encerramento da conexão
return 0
expect eof
}
} "Unable to connect to remote host: Connection timed out" {
exit 1
# Retorna 1 para a variável $? no script pai indicando que não conseguiu acessar o elemento (OSS ou MSC/HLR fora)
expect eof
}
# Encerra o expect