![구문 분석 오류: 잘못된 문자열: U+0000에서 U+001F까지의 제어 문자를 이스케이프해야 합니다. [닫기]](https://linux55.com/image/155619/%EA%B5%AC%EB%AC%B8%20%EB%B6%84%EC%84%9D%20%EC%98%A4%EB%A5%98%3A%20%EC%9E%98%EB%AA%BB%EB%90%9C%20%EB%AC%B8%EC%9E%90%EC%97%B4%3A%20U%2B0000%EC%97%90%EC%84%9C%20U%2B001F%EA%B9%8C%EC%A7%80%EC%9D%98%20%EC%A0%9C%EC%96%B4%20%EB%AC%B8%EC%9E%90%EB%A5%BC%20%EC%9D%B4%EC%8A%A4%EC%BC%80%EC%9D%B4%ED%94%84%ED%95%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EB%8B%A4.%20%5B%EB%8B%AB%EA%B8%B0%5D.png)
컬 호출을 통해 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