변수가 있는 스크립트에서 cURL 명령을 실행할 수 없습니다.

변수가 있는 스크립트에서 cURL 명령을 실행할 수 없습니다.

제 생각에는 매우 간단하다고 생각되는 스크립트가 있습니다.

#!/bin/sh

URL=myserver:9443

myCmd="curl -sS -k -X 'POST' 'https://"
myCmd+=$URL
myCmd+="/SKLM/rest/v1/ckms/accessToken' "
myCmd+="-H 'accept: application/json' "
myCmd+="-H 'Accept-Language: en' "
myCmd+="-H 'Content-Type: application/json' "
myCmd+="-d '{ \"userid\": \"SKLMAdmin\", \"password\": \"XXX\" }'"
echo $myCmd

authTok=$($myCmd)

실행하면 다음과 같은 결과가 나타납니다.

curl -sS -k -X 'POST' 'https://myserver:9443/SKLM/rest/v1/ckms/accessToken' -H 'accept: application/json' -H 'Accept-Language: en' -H 'Content-Type: application/json' -d '{ "userid": "SKLMAdmin", "password": "XXX" }'

curl: (3) URL using bad/illegal format or missing URL

curl: (6) Could not resolve host: application

curl: (6) Could not resolve host: en'

curl: (6) Could not resolve host: application

curl: (3) URL using bad/illegal format or missing URL

curl: (6) Could not resolve host: "SKLMAdmin",

curl: (3) URL using bad/illegal format or missing URL

curl: (6) Could not resolve host: "XXX"

curl: (3) unmatched close brace/bracket in URL position 1:

}'

에코 출력을 잘라서 셸에 붙여넣으면 명령이 제대로 작동하지만 스크립트 내에서 이를 실행하는 줄에 이 문자열 오류가 발생합니다.

스크립트에서 cURL을 사용하는 데 대한 몇 가지 기본 규칙을 위반하고 있다고 생각하지만 그것을 알아낼 수 없는 것 같습니다. URL을 변수(궁극적으로는 사용자 이름과 비밀번호)로 만들어야 하는데 그게 문제인 것 같습니다.

답변1

질문에 bash로 태그를 지정했으므로 bash를 사용할 수 있다고 가정합니다. 이 경우 당신은~해야 한다bash는 배열을 지원하므로 사용하세요. 배열은 명령/명령 매개변수를 저장하는 데 더 나은 선택입니다.

#!/usr/bin/env bash

url=myserver:9443
uri='/SKLM/rest/v1/ckms/accessToken'
#data='{ \"userid\": \"SKLMAdmin\", \"password\": \"XXX\" }'
data=$(jo userid=SKLMAdmin password=XXX)

opts=(
    -sSk
    -X POST
    -H 'accept: application/json'
    -H 'Accept-Language: en'
    -H 'Content-Type: application/json'
    -d "$data"
)


authtok=$(curl "${opts[@]}" "${url}${uri}")

이 배열을 사용하면 각 개별 옵션을 개별적으로 확장할 수 있지만 마치 개별적으로 참조된 것처럼 단어 분리 및 기타 원치 않는 확장을 방지할 수 있습니다.

"${opts[@]}"

다음으로 확장 예정:

'-sSk' '-H' 'accept: application/json' '-H' 'Accept-Language: en' '-H' 'Content-Type: application/json' '-d' '{ \"userid\": \"SKLMAdmin\", \"password\": \"XXX\" }'

관련 정보