2017-09-04 6 views
0

컬 명령을 매개 변수를 전달합니다 URL, 내가 CURL 명령에 매개 변수를 전달하려면 어떻게CURL API는 ICINGA의 API에 인수를 전달하는 배쉬 스크립트에

curl -k -s -u 'root:icinga' -H 'Accept: application/json' \ 
    -X POST 'https://sample.com:5665/v1/actions/acknowledge-problem?type=Service' \ 
    -d '{ "author": "icingaadmin", "comment": " Working on it.", "notify": true, "filter": "host.name == {\"$1\} && service.name == {\"$2\}"" }''' \ 
    | python -m json.tool 

$ 1, $ 2는 각각 호스트 이름과 servicenames을 가져야한다

감사를 도와주세요 Aravind

답변

1

bash에서 작은 따옴표 ('like this')를 사용하면 변수 확장없이 리터럴 문자열을 얻을 수 있습니다.

$ echo '$DISPLAY' 
$DISPLAY 

으로 :

$ echo "$DISPLAY" 
:0 

이것은 당신이 당신의 curl 명령 줄에서 정확히 같은 상황은 다음과 같습니다

'{ "author": "icingaadmin", "comment": " Working on it.", "notify": true, "filter": "host.name == {\"$1\} && service.name == {\"$2\}"" }''' 

숫자의 실제로 사용있다 즉 비교입니다 거기에 '''으로 시작하여 마지막으로 } 앞에 ""을 포함하여 문제를 인용합니다. 변수를 확장하려면 작은 따옴표 밖에서 변수를 이동해야합니다. 이 작업을 수행 할 수 있습니다이 경우

'"host.name == {"'"$1"'"} && ...' 

"$1"은 작은 따옴표의 외부 입니다. 또한,이 작업을 수행 할 수 있습니다 우리가 외부에 따옴표를 사용하고

다음
"\"host.name == {\"$1\"} ** ..." 

, 그래서 변수 확장은 정상적으로 작동하지만, 우리는 문자열 내의 모든 문자 "을 탈출해야합니다. (나는 icinga에 익숙하지이기 때문에 "뭔가")를

첫 번째 옵션을 사용하여, -d에 최종 인수가이 같은과 같습니다 foo$2bar입니다

'{ "author": "icingaadmin", "comment": " Working on it.", "notify": true, "filter": "host.name == {"'"$1"'"} && service.name == {"'"$2"'"}}' 

$1 경우, 이것은 당신에게 준다 :

{ "author": "icingaadmin", "comment": " Working on it.", "notify": true, "filter": "host.name == {"foo"} && service.name == {"bar"}} 
+0

같은 것으로 실행할 수 없었다. 이스케이프 시퀀스가 ​​여전히 작동하지 않는 것처럼 보입니다. – masteraravind

+0

어떤 방법으로 실패 했습니까? – larsks