bash shell – código de salida y salida de captura de script remoto ssh?

Pregunta:

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 "$?"

Recibo 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 variable.

Me gustaría seguir usando mi función LOG para capturar toda la salida a medida que formatea y envía cosas a un archivo, syslog y la pantalla por mí.

¿Cómo puedo capturar resultados en una var Y obtener el código de salida correcto del script remoto?

Respuesta:

La razón por la que no obtiene el código de error correcto es porque local es en realidad lo último que se ejecuta. Debe declarar la variable como local antes de ejecutar el comando.

local RESULTS
RESULTS=$(ssh user@server /usr/local/scripts/test_ping.sh)
echo $?

Puedes ver el problema aquí:

$ bar() { foo=$(ls asdkjasd 2>&1); echo $?; }; bar
2
$ bar() { local foo=$(ls asdkjasd 2>&1); echo $?; }; bar
0
$ bar() { local foo; foo=$(ls asdkjasd 2>&1); echo $?; }; bar
2

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım