개요
curl 명령어의 옵션 값들을 변수를 통해 문자열로 구성하고, 이를 이용하여 curl 명령어를 실행했을 때 예기치 않게 (여러 방법으로 시도해도) 오류가 발생하여 실행이 안 되는 문제가 발생
echo로 curl 명령어가 구성된 형태를 확인할 때는 아무런 문제가 없으나, 몇가지 문제가 발생
1.
인자로 넣은 값이 ‘Content-Type: application/json’이라면 하나로 인식해야하나, ‘Content-Type까지만 인식하고 application을 URL로 인식하여 호스트 인식이 안 되는 문제
2.
-d 옵션으로 데이터를 JSON 형태로 기재할 때, JSON에 들어가는 값을 변수로 구성하여 정상 값으로 치환했음에도 Bad Token, Bracket Not Matcehd 등 오류가 발생하는 문제
해결 방법
echo로 찍은 명령어 형식에는 문제가 없었기 때문에, curl 명령어와 변수로 구성한 옵션들을 하나의 문자열로 저장해두고 eval을 활용하여 명령어를 실행
예시는 아래와 같은데, COMMAND를 문자열 형태로 구성하여 eval로 실행
TIMEOUT=5
URL="..."
HEADER="'...'"
VAR1=$1
VAR2=$2
JSON="'{ \"var1\": \"${VAR1}\", \"var2\": ${VAR2} }'"
COMMAND=$(echo curl --silent --connect-timeout "${TIMEOUT}" -XPOST -H "${HEADER}" "${URL}" -d "${JSON}")
eval ${COMMAND}
Bash
복사