Como verificar se algum erro ocorreu durante o ssh?

8

Estou escrevendo um script de implantação e preciso reverter se algum erro ocorrer.

Por exemplo:

#!/bin/bash
ssh myapp '
    mkdir /some/dir
    # check if above command failed, and execute rollback script if needed
'
# or maybe do it from here?

Agora mesmo quando eu executo este script, se o mkdir falhar, ele imprime na minha tela e continua a execução. Eu preciso pegar esse erro e fazer algo sobre isso.

    
por ChocoDeveloper 03.08.2012 / 19:18

2 respostas

5

O status de saída de ssh será o status de saída do comando remoto. Por exemplo

ssh myapp 'exit 42'
echo $?

deve imprimir 42 ( $? é o status de saída do último comando executado).

Uma opção é sair imediatamente se o mkdir falhar:

ssh myapp 'mkdir /some/dir || exit 42; do-more-stuff'
if [[ $? = 1 ]]; then
   echo "Remote mkdir failed"
fi

Provavelmente, é melhor tentar lidar com falhas remotas no script, se possível.

    
por 03.08.2012 / 19:23
5

Se você realmente precisar capturar a mensagem de erro , tente fazer isso:

#!/bin/bash
result='ssh myapp 'mkdir /some/dir' 2>&1'
if [[ -n $result ]]; then
    echo "the following error occurred: $result"
fi

Por isso, você redireciona a saída de erro padrão para a saída padrão e salva a saída do comando ssh em $result . Se você precisar apenas do código de erro / status de saída, consulte esta resposta .

    
por 03.08.2012 / 19:32

Tags