2017-09-04 5 views
0

commande Curl pour passer des arguments dans l'API icinga:API CURL pour passer des paramètres dans le script Bash

J'ai une commande boucle et passer sur un script Bash, je dois avoir deux variables dans la méthode POST pour cette URL, Comment puis-je passer le paramètre à la commande CURL

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 et $ 2 devrait avoir le nom d'hôte et servicenames respectivement

S'il vous plaît aider

merci Aravind

Répondre

1

Si vous utilisez des guillemets simples ('like this') dans bash, vous obtenez une chaîne littérale sans expansion de variable. Autrement dit, comparer:

$ echo '$DISPLAY' 
$DISPLAY 

Avec:

$ echo "$DISPLAY" 
:0 

C'est exactement la même situation que dans votre ligne de commande curl, où vous avez:

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

Il y a actuall un certain nombre de citation des problèmes là à partir de la ''' à la fin, et en incluant le "" juste avant la finale }. Si vous souhaitez étendre ces variables, vous devrez les déplacer en dehors de vos guillemets simples. Vous pouvez le faire:

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

Dans ce cas, le "$1" est en dehors des guillemets simples. Vous pouvez le faire:

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

Ici, nous sommes en train d'utiliser des guillemets à l'extérieur, de sorte que l'expansion des variables fonctionne normalement, mais nous devons échapper à chaque " littéral dans la chaîne.

En utilisant la première option, l'argument final -d ressemblerait à quelque chose comme ça ("quelque chose" parce que je ne suis pas familier avec icinga):

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

Si $1 est foo et $2 est bar, cela vous donne:

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

Je ne pouvais pas exécuter avec le même, On dirait que la séquence d'échappement ne fonctionne toujours pas. – masteraravind

+0

En quoi a-t-il échoué? – larsks