Deseo usar shell para invocar un script en un servidor remoto. Me gustaría capturar la salida de ese script (sus mensajes de registro) y el código de salida que devuelve.
Si hago esto:
ssh user@server /usr/local/scripts/test_ping.sh
echo "$?"
Me sale el código de salida pero no puedo capturar los mensajes de registro remoto.
Si hago esto:
local RESULTS=$(ssh user@server /usr/local/scripts/test_ping.sh)
echo "$?"
LOG "${RESULTS}";
Puedo registrar mi salida usando mi función LOG pero parece que no puedo obtener un código de salida correcto, supongo que el código que obtengo es el código de la asignación de varianble.
Me gustaría continuar usando mi función LOG para capturar toda la salida a medida que se formatea y envía cosas a un archivo, syslog y la pantalla por mí.
¿Cómo puedo capturar resultados en una variable Y obtener el código de salida correcto del script remoto?
Respuestas:
La razón por la que no obtiene el código de error correcto es porque en
local
realidad es lo último que se ejecutó. Debe declarar la variable como local antes de ejecutar el comando.Puedes ver el problema aquí:
fuente
El "local" parece ser el problema. Esto funciona para mi:
fuente
En realidad, ninguna de las respuestas anteriores atrapa el código de error ssh y el mensaje, lo que podría hacerse de la siguiente manera (ignore mis funciones personalizadas):
fuente