
Estou escrevendo um utilitário de backup simples no bash e qualquer saída deve estar em JSON.
Estou verificando a acessibilidade do host e, se ocorrer algum erro, quero imprimi-lo. No entanto, tenho um problema com a saída:
FALHA=1 TIME_STARTED=$(data +%s) OUT="$( ${SSH} ${SSH_ARGS} ${HOST} 'verdadeiro' 2>&1 >/dev/null)" se [[$? != 0 && ! -z "${OUT}" ]]; então TIME_ENDED=$(data +%s) JSON="{ \"time_started\": \"${TIME_STARTED}\", \"time_ended\": \"${TIME_ENDED}\", \"estado\": ${FAILED}, \"erro\" : \"${OUT}\" }" eco "${JSON}" sair ${TRUE} fi
resulta em:
[root@internal ~]# ./backup -H 17.17.0.111 " }time_started": "1394889912", "time_ended": "1394889913", "state": 1, "error": "Permissão negada (chave pública, senha, teclado interativo). [root@interno]#
Estou usando alguns utilitários CLI node.js para imprimir JSON para a saída final, mas ele falha porque obtém JSON inválido do shell. Como devo consertar isso?
PS: Eu sei que existem muitas bibliotecas para formatar JSON, mas preciso fazer assim e gostaria de não discutir isso aqui.
Responder1
Parece-me que a saída do ssh está captando um caractere de retorno de carro. Tentar:
JSON="{ \"time_started\": \"${TIME_STARTED}\", \"time_ended\": \"${TIME_ENDED}\", \"state\": ${FAILED}, \"error\": \"${OUT%$'\r'}\" }"
Explicação: Isto:
${OUT%$'\r'}
cortes de um caractere CR final, se houver ...