Desejo usar o shell para chamar um script em um servidor remoto. Gostaria de capturar a saída desse script (suas mensagens de log) e o código de saída que ele retorna.
Se eu fizer isso:
ssh user@server /usr/local/scripts/test_ping.sh
echo "$?"
Eu recebo o código de saída, mas não consigo capturar as mensagens de log remoto.
Se eu fizer isso:
local RESULTS=$(ssh user@server /usr/local/scripts/test_ping.sh)
echo "$?"
LOG "${RESULTS}";
Consigo registrar minha saída usando minha função LOG, mas não consigo obter um código de saída correto, presumo que o código que recebo seja o código da atribuição variável.
Gostaria de continuar usando minha função LOG para capturar toda a saída conforme formata e envia as coisas para um arquivo, syslog e a tela para mim.
Como capturar resultados em uma var E obter o código de saída correto do script remoto?
Respostas:
O motivo pelo qual você não está obtendo o código de erro correto é porque,
local
na verdade, é a última coisa executada. Você precisa declarar a variável como local antes de executar o comando.Você pode ver o problema aqui:
fonte
O "local" parece ser o problema. Isso funciona para mim:
fonte
Na verdade, nenhuma das respostas acima intercepta o código e a mensagem de erro ssh, o que pode ser feito da seguinte maneira (ignore minhas funções personalizadas):
fonte