
Bash에서 몇 가지 간단한 백업 유틸리티를 작성 중이며 모든 출력은 JSON 형식이어야 합니다.
호스트 연결 가능성을 확인 중인데 오류가 발생하면 인쇄하고 싶습니다. 그러나 출력에 문제가 있습니다.
실패=1 TIME_STARTED=$(날짜 +%s) OUT="$( ${SSH} ${SSH_ARGS} ${HOST} 'true' 2>&1 >/dev/null)" 만약 [[ $? != 0 && ! -z "${OUT}" ]]; 그 다음에 TIME_ENDED=$(날짜 +%s) JSON="{ \"time_started\": \"${TIME_STARTED}\", \"time_ended\": \"${TIME_ENDED}\", \"state\": ${FAILED}, \"error\" : \"${OUT}\" }" 에코 "${JSON}" ${TRUE} 종료 fi
결과는 다음과 같습니다.
[root@internal ~]# ./backup -H 17.17.0.111 " }time_started": "1394889912", "time_ended": "1394889913", "state": 1, "error": "권한이 거부되었습니다(공개키,암호,키보드-대화형). [루트@내부]#
최종 출력을 위해 JSON을 인쇄하기 위해 일부 node.js CLI 유틸리티를 사용하고 있지만 셸에서 유효하지 않은 JSON을 가져오기 때문에 실패합니다. 이 문제를 어떻게 해결해야 합니까?
추신: JSON 형식을 지정하는 라이브러리가 많다는 것을 알고 있지만 이 방법을 사용해야 하므로 여기서는 논의하지 않겠습니다.
답변1
나에게 SSH 출력이 캐리지 리턴 문자를 선택하는 것 같습니다. 노력하다:
JSON="{ \"time_started\": \"${TIME_STARTED}\", \"time_ended\": \"${TIME_ENDED}\", \"state\": ${FAILED}, \"error\": \"${OUT%$'\r'}\" }"
설명: 이:
${OUT%$'\r'}
후행 CR 문자가 있는 경우 잘라내기...