PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Linux Shell-Eingabe in Syntax für MS Eingabeaufforderung überführen


mittelding
2014-09-27, 20:52:20
Hallo!

Ich beschäftige mich gerade mit ElasticSearch, welches auf seiner Website viele Beispiele anhand von Shell + Curl liefert, beispielsweise sowas hier:

curl -XGET 'http://localhost:9200/twitter/tweet/1'

Ich nutze jedoch momentan Windows und würde die Beispiele gerne in dessen Eingabeaufforderung ausführen. Curl für Windows läuft bereits und so ist das Ausführen des oben genannten Befehls kein Problem.

Die Manipulation von Daten erfordert jedoch, dass zusätzlich ein JSON-Dokument übergeben wird, und hierbei hänge ich gerade fest. Ein Beispiel für die Shell:

curl -XPOST 'localhost:9200/test/type1/1/_update' -d '{
"script" : "ctx._source.text += \"Lorem Ipsum\"",
}'

Das bekomme ich leider nicht in die richtige "Windows-Syntax" übersetzt. Problempunkt sind wohl die Anführungszeichen. Diese habe ich nach etwas Googlen durch dreifach-Anführungszeichen ersetzt, was leider keine Besserung brachte. Eine besondere Schwierigkeit könnte das Escapen des Strings "Lorem Ipsum" innerhalb des Dokuments sein, da an dieser Stelle die Escape-Sequenz ja in JSON selbst erhalten bleiben muss.

In allen meinen Vesuchen meldet ElasticSearch eine JsonParse-Exception, ich schaffe es folglich nicht, das Dokument richtig zu übergeben. Weiß auf die schnelle jemand, wie ich das richtig "übersetzen" kann?

Danke vielmals.

universaL
2014-09-27, 21:00:46
kannst du nicht auch die zu senden daten per textdatei angeben?

PHuV
2014-09-28, 10:33:29
Warum installierst Du dann keine Cygwin-Tools?

mittelding
2014-09-28, 15:54:54
Danke euch beiden. Habe es jetzt mittels Cygwin gelöst, das macht die Sache tatsächlich viel einfacher.

Gnafoo
2014-10-14, 02:49:09
Kannst ansonsten auch Folgendes probieren (den Parameter an -d selber nochmal in Anführungszeichen setzen):


curl -X POST -H "content-type:application/json" http://localhost:1234/ -d "{ """script""" : """ctx._source.text += \\"""Lorem Ipsum\\"""""" }"


Im netcat sieht es zumindest richtig aus:


C:\Temp>ncat -l -p 1234
POST / HTTP/1.1
User-Agent: curl/7.30.0
Host: localhost:1234
Accept: */*
content-type:application/json
Content-Length: 52

{ "script" : "ctx._source.text += \"Lorem Ipsum\"" }


Single-quotes werden von der Eingabeaufforderung glaube ich gar nicht besonders behandelt. Deswegen kriegt curl bei „-d '{ "script" ...“ mehrere Parameter: erst „-d“, dann „'{“, dann „script“ usw. Das Ergebnis ist dann, dass curl nur „'{“ als Daten sendet.

Trap
2014-10-14, 07:36:37
Die Microsoft-Variante von curl wäre Powershell "Invoke-RestMethod": http://technet.microsoft.com/en-us/library/hh849971.aspx

Aber mit dem richtigen Quoting von strings muss man sich da trotzdem beschäftigen...