
我正在 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_ending\": \"${TIME_ENDED}\", \"state\": ${FAILED}, \"error\" : \"${OUT}\" }" 回顯“${JSON}” 退出${TRUE} 菲
結果是:
[root@internal ~]# ./backup -H 17.17.0.111 “ }time_started”:“1394889912”,“time_ending”:“1394889913”,“state”:1,“error”:“權限被拒絕(公鑰、密碼、鍵盤互動)。 [根@內部]#
我正在使用一些 node.js CLI 實用程式來漂亮地列印 JSON 以進行最終輸出,但它失敗了,因為它從 shell 獲取了無效的 JSON。我該如何解決這個問題?
PS:我知道有很多函式庫可以格式化 JSON,但我需要這樣做,我不想在這裡討論它。
答案1
在我看來,ssh 輸出正在拾取回車符。嘗試:
JSON="{ \"time_started\": \"${TIME_STARTED}\", \"time_ended\": \"${TIME_ENDED}\", \"state\": ${FAILED}, \"error\": \"${OUT%$'\r'}\" }"
解釋:這個:
${OUT%$'\r'}
剪切尾隨 CR 字元(如果有)...