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