Sustitución de comandos Bash y problema de variables

Sustitución de comandos Bash y problema de variables

Estoy escribiendo una utilidad de copia de seguridad simple en bash y cualquier resultado debe estar en JSON.

Estoy comprobando la accesibilidad del host y, si se produce algún error, quiero imprimirlo. Sin embargo, tengo un problema con la salida:

FALLADO=1
TIME_STARTED=$(fecha +%s)
OUT="$( ${SSH} ${SSH_ARGS} ${HOST} 'verdadero' 2>&1 >/dev/null)"

si [[$? != 0 && ! -z "${SALIDA}" ]]; entonces

    TIME_ENDED=$(fecha +%s)
    JSON="{ \"time_started\": \"${TIME_STARTED}\", \"time_ended\": \"${TIME_ENDED}\", \"state\": ${FAILED}, \"error\" : \"${SALIDA}\" }"
    eco "${JSON}"    
    salir ${VERDADERO}
fi

da como resultado:

[root@internal ~]# ./backup -H 17.17.0.111
" }time_started": "1394889912", "time_ended": "1394889913", "state": 1, "error": "Permiso denegado (clave pública, contraseña, teclado interactivo).
[raíz@interno]#

Estoy usando algunas utilidades CLI de node.js para imprimir JSON para el resultado final, pero falla porque obtiene un JSON no válido del shell. ¿Cómo debería solucionar esto?

PD: Sé que hay muchas bibliotecas para formatear JSON, pero necesito hacerlo de esta manera y me gustaría no discutirlo aquí.

Respuesta1

Me parece que la salida ssh está captando un carácter de retorno de carro. Intentar:

JSON="{ \"time_started\": \"${TIME_STARTED}\", \"time_ended\": \"${TIME_ENDED}\", \"state\": ${FAILED}, \"error\": \"${OUT%$'\r'}\" }"

Explicación: Esto:

${OUT%$'\r'}

cortes de un carácter CR final si hay uno...

información relacionada