Substituição de comando Bash e problema de variável

Substituição de comando Bash e problema de variável

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

informação relacionada