Замена команд Bash и проблема с переменными

Замена команд Bash и проблема с переменными

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

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

НЕУДАЧНО=1
TIME_STARTED=$(дата +%s)
OUT="$( ${SSH} ${SSH_ARGS} ${HOST} 'истина' 2>&1 >/dev/null)"

если [[ $? != 0 && ! -z "${OUT}" ]]; тогда

    TIME_ENDED=$(дата +%s)
    JSON="{ \"время_начало\": \"${TIME_STARTED}\", \"время_окончание\": \"${TIME_ENDED}\", \"состояние\": ${FAILED}, \"ошибка\": \"${OUT}\" }"
    эхо "${JSON}"    
    выход ${ИСТИНА}
фи

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

[root@internal ~]# ./backup -H 17.17.0.111
" }time_started": "1394889912", "time_ended": "1394889913", "state": 1, "error": "Отказано в доступе (открытый ключ, пароль, интерактивная клавиатура).
[корень@внутренний]#

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

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

решение1

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

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

Объяснение: Это:

${OUT%$'\r'}

вырезает конечный символ CR, если он есть...

Связанный контент