2017-05-16 1 views
0

Ich habe ein Shell-Skript geschrieben, das mit dem Befehl curl einen Jenkins-Job mit Parametern erstellt. Folgendes ist der Code.CURL Post mit Variable als Parameter funktioniert nicht

#!/bin/bash 
val3=($(cut -d ',' -f3 csvfile.csv)) 
printf "%s\n" "${val3[0]}" 
echo $val3 

curl -X POST https://my-jenkins.abc.com/inst/job/Aut/job/pipe-workflow/job/Job3/build \ 
--user user:token \ 
    --data-urlencode json='{"parameter": [{"name":"valA", "value":"${val3}"}]}' 

Ich lese eine Datei als ‚csvfile.csv‘ genannt und das Bestehen der Wert von $ val3 im curl Befehl. Die Ausgabe von $ val3 ist 'John'. Ich bin nicht in der Lage, den Wert von $ val3 in der Locke zu ersetzen. Es nimmt es literarisch. Ich habe auch versucht zu folgen, aber keiner von ihnen hat geholfen.

--data-urlencode json='{"parameter": [{"name":"valA", "value":"$val3"}]}' 

--data-urlencode json='{"parameter": [{"name":"valA", "value":"${val3[0]}"}]}' 

--data-urlencode json='{"parameter": [{"name":"valA", "value":"val3"}]}' 

--data-urlencode json='{"parameter": [{"name":"valA", "value":"${val3}"}]}' 

--data-urlencode json="{"parameter": [{"name":"valA", "value":"${val3}"}]}" 

Keine der oben genannten funktioniert. Der letzte ist Fehler werfen. Als ich in Jenkins Job zu sehen, ist der Wert des Parameters, wie folgend:

$ val3, val3, $ {val3}

Es nimmt es, wie es den Wert als Substitution ist.

printf "%s\n" "${val3[0]}" 
echo $val3 

Die obigen zwei Zeilen geben mir Ausgabe als John, aber während es in curl, es funktioniert nicht. Was verursacht das und wie behebe ich es?

Vielen Dank im Voraus

+0

http://stackoverflow.com/q/6697753/2088135 –

+0

Dank Tom. Ich habe sowohl einzelne als auch doppelte Anführungszeichen ausprobiert und es hat nicht funktioniert – Raji

+1

Sie müssen doppelte Anführungszeichen auf der Außenseite verwenden und dann die doppelten Anführungszeichen innerhalb der Zeichenkette flüchten. Ich nehme an, dass die Variablen selbst keine Anführungszeichen enthalten. –

Antwort

1

Hier einige Probleme, die ich sehen kann:

val3=($(cut -d ',' -f3 csvfile.csv)) 

Dies schafft eine Array, so dass Sie wahrscheinlich diese wollen: Ihr

val3=$(cut -d ',' -f3 csvfile.csv) 

Dann Variable sollte wie folgt eingefügt werden:

--data-urlencode json="{\"parameter\": [{\"name\": \"valA\", \"value\":\"$val3\"}]}" 

Sie können auch ein Tool wie jq mit berücksichtigen wollen Ihre JSON zu produzieren:

json="$(jq -nc --arg v "$var3" '{ parameter: [{ name: "valA", value: $v }] }')" 
+0

Vielen Dank !! Dies funktioniert, nachdem Sie die von Ihnen erwähnte Zuweisungsanweisung geändert und einen Schrägstrich eingegeben haben. Danke vielmals – Raji