구문 분석 오류: 잘못된 문자열: U+0000에서 U+001F까지의 제어 문자를 이스케이프해야 합니다. [닫기]

구문 분석 오류: 잘못된 문자열: U+0000에서 U+001F까지의 제어 문자를 이스케이프해야 합니다. [닫기]

컬 호출을 통해 JSON을 수신하는 스크립트 실행.sh가 있습니다.

#!/bin/bash

source getoutput.sh
server="$1"
cmd="$2"

res=$(curl -sS http://$server -X PUT -H "Content-Type: application/json" -d "{ \"command\" : \"$cmd\" }")

이 ./execute.sh 246.XXX:2000 "FXXXXXXXXXXXX-XXXXXXXX-XXXXXXXX-XXXX 중지"를 실행할 때

오류 없이 작동 중입니다.

하지만 while 루프 내에서 실행하면

while read id; do
./execute.sh 246.X.X.X:2000 "stop $id"
done < id

구문 분석 오류가 발생합니다. 잘못된 문자열: U+0000에서 U+001F까지의 제어 문자는 6행, 74열에서 이스케이프되어야 합니다.

출력 차이:

피복재:

+ source getoutput.sh
+ server=246.X.X.X:2000
+ cmd='stop FXXXXXXXXXXX-XXXXXXXX-XXXXXXXX-XXXX'
++ curl -sS http://246.X.X.X:2000 -X PUT -H 'Content-Type: application/json' -d '{ "command" : "stop FXXXXXXXXXXX-XXXXXXXX-XXXXXXXX-XXXX" }'
+ res='{
  "status" : 200,
  "status_message" : "OK",
}'

while 루프를 사용할 때는 작동하지 않습니다.

+ source getoutput.sh
+ server=246.X.X.X:2000
+ ' cmd='stop FXXXXXXXXXXX-XXXXXXXX-XXXXXXXX-XXXX
++ " }'url -sS http://246.X.X.X:2000 -X PUT -H 'Content-Type: application/json' -d '{ "command" : "stop FXXXXXXXXXXX-XXXXXXXX-XXXXXXXX-XXXX
+ res='{
      "status" : 400,
      "status_message" : "Bad Request",
}'

jq 버전: 1.5, bash 버전: 4.3.48

관련 정보