Verifique se há uma palavra na saída expect e inclua-a em um arquivo de texto [closed]

1

Eu tenho um código como este:

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

set timeout 10
match_max 256
log_file report.txt

expect_after eof {exit 0}
spawn ssh -l user ip

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

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

set timeout 600

expect "~]#" { send "scp user@ip:/sometlink/AMM.tar.gz /somelink/\r" }

expect "Password:" { send "password\r" }
sleep 5

set timeout 3600

expect "~]#" { send "swadm install import AMM\r" }
sleep 5

expect "~]#" { send "swadm install apply AMM\r" }

expect "~]#" { send "swadm install show AMM\r"}

expect -re "(.*)\r\nproduct-state=(.*)"

foreach line [split $expect_out(1,string) \n] {
        if {[string match *Applied* $line]} {
            send_log "Product install of AMM ----------------------------- Passed"
                    }
    else {
           send_log "Product install of AMM ----------------------------- Failed"
            }
}


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

e é suposto para verificar a saída no show de instalação do swadm AMM

product-id=AMM
product-name=Application Manager
product-version=1.0.0
product-state=Applied
product-description=
NCL-list=AMMLV010

e, se encontrar a palavra Aplicada, adicione ao arquivo de teste que a instalação foi bem-sucedida e, se não for, Falha. mas isso me dá um erro para a parte else

invalid command name "else"
     while executing
"else {
           send_log "Product install of AMM -----------------------------     Failed"

("foreach" body line 6)
invoked from within
"foreach line [split $expect_out(1,string) \n] {
    if {[string match *Applied* $line]} {
            send_log "Product install of AMM-----..."
    
por Bebe 02.03.2017 / 17:40

2 respostas

0

Eu faria isso:

expect "~]#" { send "swadm install show AMM\r"}
expect "~]#" {
    if {[string match {*product-state=Applied*} $expect_out(buffer)]} {
        do-thing-1
    } else {
        do-thing-2
    }
}

Após o comando "show", aguarde o próximo prompt. Em seguida, tudo o que espera foi visto em expect_out(buffer) e você pode usar a correspondência de cadeia (ou correspondência de regex se desejar) no texto do buffer inteiro. Você não precisa dividir por linha.

    
por 02.03.2017 / 19:52
0

Eu descobri a questão! deve ser} else {sem a nova linha intermediária.

    
por 02.03.2017 / 18:02