1

Я пишу несколько простых утилит резервного копирования в Bash, и любой вывод должен быть в формате JSON.

Я проверяю доступность хоста и, если возникает какая-либо ошибка, я хочу распечатать ее. Тем не менее, у меня есть проблема с выводом:

FAILED=1
TIME_STARTED=$(date +%s)
OUT="$( ${SSH} ${SSH_ARGS} ${HOST} 'true' 2>&1 >/dev/null)"

if [[ $? != 0 && ! -z "${OUT}" ]]; then

    TIME_ENDED=$(date +%s)
    JSON="{ \"time_started\": \"${TIME_STARTED}\", \"time_ended\": \"${TIME_ENDED}\", \"state\": ${FAILED}, \"error\": \"${OUT}\" }"
    echo "${JSON}"    
    exit ${TRUE}
fi

результаты в:

[root@internal ~]# ./backup -H 17.17.0.111
" }time_started": "1394889912", "time_ended": "1394889913", "state": 1, "error": "Permission denied (publickey,password,keyboard-interactive).
[root@internal]# 

Я использую некоторые утилиты CLI для node.js, чтобы красиво печатать JSON для окончательного вывода, но это не удается, потому что он получает недопустимый JSON из оболочки. Как мне это исправить?

PS: я знаю, что есть много библиотек для форматирования JSON, но я должен сделать это таким образом, и я хотел бы не обсуждать это здесь.

1 ответ1

0

Мне кажется, что ssh выводит символ возврата каретки. Пытаться:

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

Пояснение: Это:

${OUT%$'\r'}

сокращения конечного символа CR, если он есть ...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .