2017-11-28 2 views
0

Folgende Curl-Verwendung ist nicht wie geschweiften Klammern in Klammern. Ich habe versucht zu entkommen, aber es hat nicht geholfen ... irgendwelche Ideen?Brace Usage Fehler bei der Verwendung von Curl mit in bash

echo "$(curl -s -u ${USERNAME}:${PASSWORD} GET ${hostName}/${path}.json| jq -r -c '[.field1,.field2] | \"(.[0]) ,(.[1])"')" 

Ergebnis:

jq: error: syntax error, unexpected INVALID_CHARACTER (Unix shell 
quoting issues?) at <top-level>, line 1: 

error near (.[0]`)` 
+2

'echo" $ (einige Befehle) "' ist fast immer ein Fehler und kompliziert das Zitat hier. Warum nicht die Befehle direkt ausführen und die Erfassung und Ausgabe der Ausgabe überspringen? –

+1

Was hoffst du '\" (. [0]), (. [1]) "' würde tun? – tripleee

+0

Sie wissen, dass keine geschweiften Klammern erforderlich sind? Sie brauchen sie nur, wenn das nächste Zeichen Teil eines gültigen Variablennamens ist. Wie oben, nicht sicher, warum Sie nur ein Doppelzitat entkommen lassen? – grail

Antwort

1

Debug-Fälle wie diesen, ist es am besten, Dinge zu brechen in den Basiskomponenten zuerst. In Ihrem Fall würde ich raten Sie den jq Filter sein soll:

[.field1,.field2] | "\(.[0]), \(.[1])" 

Zum Test:

jq -r -c '[.field1,.field2] | "\(.[0]), \(.[1])"' 
{"field1": 1, "field2": 2} 
1, 2 

Sobald Sie diesen Teil Recht haben, ist der Rest einfach. Vorausgesetzt, Sie verwenden eine anständige Shell, könnten Sie wahrscheinlich das Leben einfach für sich selbst machen, indem Sie $() statt "$()" verwenden, oder die Befehlsersetzung insgesamt zu vermeiden.

Von der Entwicklung und Erprobung Sicht könnte es sinnvoll, das jq Programm zu setzen, die Sie wissen, in eine Datei korrekt zu sein, sagen program.jq, und dann können Sie in der Reihenfolge:

(a) verifizieren Sie es im Standalone-Modus, indem Sie jq -r -c -f program.jq

verwenden. (b) Schließen Sie den jq-Aufruf an Ihre Pipeline an, um sicherzustellen, dass es an keinem anderen Ort ein anderes Problem gibt.

Wenn die Verwendung von "program.jq" letztendlich nicht zufriedenstellend ist, sollten Sie in Erwägung ziehen, eine Shell-Variable auf das jq-Programm zu setzen, z.

JQ='[.field1,.field2] | "\(.[0]), \(.[1])"' 

echo $(jq -r -c "$JQ") 

Natürlich ist die letzte Zeile oben nur zum Testen da. Vielleicht brauchst du gar nicht $()?

+0

Danke, dass es funktioniert hat ... ich benutzte diese innere jenkins-Shell ... ich verwechselte es, als es Schrift in rot hervorhob .. aber es funktionierte – codeexplorer

Verwandte Themen