divide uma saída de um comando e procura uma palavra em espera

0

Eu tenho esse pedaço de código que eu quero ler a saída de um comando, substring-lo desde o início para um caractere especial e, em seguida, se essa parte não está vazia send_log que passou. Mas não tenho certeza de como fazer isso. Aqui está o que eu tenho até agora.

#!/opt/tools/unsupported/expect-5.39/bin/expect

spawn ssh -l $USER $VMIP_1
expect_after eof {exit 0}
set timeout 10
match_max 256

expect "(yes/no)?" { send "yes\r" }
expect "password:" { send "$PASSWORD\r" }

expect "~]#" { send "date\r" }

expect "~]#" { send "pidof snmpd\r" }
sleep 5
expect "~]#" {
set buf [split $expect_out(buffer) "[root@"]
if {[lindex $buf 0] !=="" }
{
        log_file /home/bebehman/vnf/trunk/report.txt
                 send_log "Verify net-snmp installation and functionality on $VMIP_1--------------------- Passed\n"
    } else { send_log "Verify net-snmp installation and functionality on $VMIP_1--------------------- Failed\n"
    }
 }
    
por Bebe 07.03.2017 / 15:31

2 respostas

0

Observe que split não funciona como você parece pensar. Ele não se divide em uma palavra, mas em qualquer caractere dado na segunda cadeia. Por exemplo, split "xax" "abc" dividirá xax em 2 partes, apesar de não conter a seqüência abc .

Uma maneira simples de dividir uma string em uma determinada substring é, por exemplo, usar o comando string first para encontrar o início da substring e, em seguida, string range para copiar até esse ponto:

set str $expect_out(buffer)
set v [string range $str 0 [string first "\[root@" $str]-1]

Você pode testar v para vazio ou não.

Como alternativa, em vez de fazer expect "~]#" , por que não expect "\[root@" , então $expect_out(buffer) já conterá o que você deseja extrair.

Para versões anteriores de tcl / expect, talvez seja necessário usar expr para subtrair 1 do índice, em vez de permitir que string range aceite o número do formulário. Então use, por exemplo:

set v [string range $str 0 [expr [string first "\[root@" $str] - 1]]
    
por 07.03.2017 / 18:15
0
if {[lindex $buf 0] !=="" }
{

não compilará; você precisa disso

if { [lindex $buf 0] != "" } {
    
por 07.03.2017 / 16:47