Esperar script nos códigos bash e exit

0

Eu tenho um script bash que chama um script expect .

O script expect tem várias condições. É ssh em uma caixa e executa um comando, e há diferentes erros possíveis que poderiam acontecer, que eu dei a códigos de saída da seguinte forma:

expect {
    "passwd: password updated successfully" {
    exit 0
    }
    "Password unchanged" {
    exit 1
    }
    "Bad: new and old password are too similar" {
    exit 2
    }
    "You must choose a longer password" {
    exit 3
    }
}

Eu tinha planejado pegar esses códigos de saída e usá-los no script bash que chamava o script expect, assim:

            if [ $? -eq 0 ]; then
            echo -e "\n"
            echo "Password successfully changed on $host by $user"

            elif [ $? -eq 1 ]; then
                echo "Failure, password unchanged"
            elif [ $? -eq 2 ]; then
                echo "Failure, new and old passwords are too similar"
            elif [ $? -eq 3 ]; then
                echo "Failure, password must be longer"
            else
                echo "Password failed to change on $host"
        fi

Mas isso não funciona. Parece que o script expect retorna apenas 0 se for bem-sucedido ou 1 se falhar, independentemente de onde falhar. É possível recuperar os códigos de saída que eu atribuo e usá-los no script bash?

Ou seria melhor usar "send_user" no script de expectativa para descrever o erro? Em caso afirmativo, como eu seria capaz de ter o script bash usando a saída do comando "send_user" no esperado?

    
por Johnny sniper 13.06.2013 / 18:31

2 respostas

2

Você precisa inicializar o valor de retorno para uma variável temporária. então assim:

   ./my_expect_script.expect
   a=$?
   if [ $a -eq 0 ]; then
        echo -e "\n"
        echo "Password successfully changed on $host by $user"

        elif [ $a -eq 1 ]; then
            echo "Failure, password unchanged"
        elif [ $a -eq 2 ]; then
            echo "Failure, new and old passwords are too similar"
        elif [ $a -eq 3 ]; then
            echo "Failure, password must be longer"
        else
            echo "Password failed to change on $host"
    fi
    
por 13.06.2013 / 19:11
2

Uma maneira mais simples seria usar uma instrução case em vez de verificar $? repetidamente:

case "$?" in
    0) echo "Password successfully changed on $host by $user" ;;
    1) echo "Failure, password unchanged" ;;
    2) echo "Failure, new and old passwords are too similar" ;;
    3) echo "Failure, password must be longer" ;;
    *) echo "Password failed to change on $host" ;;
esac
    
por 24.08.2013 / 06:42