Sternchen * in Bash unter Windows mit Escapezeichen versehen

843
Tamlyn

Der folgende Befehl funktioniert in GNU Bash unter FreeBSD, jedoch nicht in Git Bash unter Windows:

curl -X PUT https://example.com/_config/cors/origins -d '"*"' 

Das beabsichtigte Ergebnis ist das Senden einer PUTAnforderung an https://example.com/_config/cors/originsden Hauptteil "*"(einschließlich der Anführungszeichen - es handelt sich um eine JSON-Zeichenfolge).

Unter Windows wird das Sternchen jedoch als Glob erweitert, obwohl es in Anführungszeichen steht. Auszug aus dem --trace-asciicURL-Protokoll:

0000: PUT / _config / cors / origins HTTP / 1.1 004f: ​​User-Agent: curl / 7.30.0 008e: Inhaltslänge: 13 00a2: Inhaltstyp: application / x-www-form-urlencoded 00d3:  => Daten senden, 13 Byte (0xd) 0000: .editorconfig == Info: Upload vollständig gesendet: 13 von 13 Bytes 

( .editorconfigist die erste Datei im aktuellen Verzeichnis.)

Das Entkommen mit einem umgekehrten Schrägstrich ( '"\*"') überträgt den umgekehrten Schrägstrich:

0000: PUT / _config / cors / origins HTTP / 1.1 004f: ​​User-Agent: curl / 7.30.0 008e: Inhaltslänge: 4 00a1: Inhaltstyp: application / x-www-form-urlencoded 00d2:  => Daten senden, 4 Byte (0x4) 0000: "\ *" == Info: Upload vollständig gesendet: 4 von 4 Bytes 

Zwei Backslashes übertragen auch beide Backslashes in der Anforderung.

0000: PUT / _config / cors / origins HTTP / 1.1 004f: ​​User-Agent: curl / 7.30.0 008e: Inhaltslänge: 5 00a1: Inhaltstyp: application / x-www-form-urlencoded 00d2:  => Daten senden, 5 Byte (0x5) 0000: "\\ *" == Info: Upload vollständig gesendet: 5 von 5 Bytes 

Ist das ein Fehler?

1
Ich habe eine Antwort gepostet, aber wenn Sie sagen, dass Sie zwei Backslashes verwendet haben, können Sie Ihren Beitrag tatsächlich bearbeiten, um uns ein Beispiel zu zeigen? Oder bearbeiten Sie einfach die verschiedenen Ideen / Versuche, die Sie gemacht haben. Dies wäre unter Debugging-Gesichtspunkten hilfreich. JakeGould vor 9 Jahren 0
Bist du sicher, dass Bash der Täter ist und nicht Locken? Welche Curl benutzt du (native build oder cygwin / msys)? Einige Versionen von libc für Windows erweitern * (aber keine anderen Globs), während die Befehlszeile (von `GetCommandLine` bis argc / argv) analysiert wird. -> Können Sie mit cmd.exe (das die Befehlszeile unverändert übergibt) testen, wenn Sie können siehe auch das "globbing"? mihi vor 9 Jahren 0
Wenn Sie eine `cmd`-Eingabeaufforderung verwenden, kann ich sie mit` -d \ "* \" `zum Laufen bringen Tamlyn vor 9 Jahren 0
und wenn Sie `-d '\" * \ "' 'in der Bash versuchen, funktioniert es nicht? mihi vor 9 Jahren 0
Nein, es sendet auch die Backslashes. Tamlyn vor 9 Jahren 0

1 Antwort auf die Frage

0
JakeGould

Versuchen Sie es wie diese Idee, basierend auf flüchtigen Tipps und Ideen, die auf dieser Website zu finden sind :

curl -X PUT https://example.com/_config/cors/origins -d "\*" 

Eine andere Idee ergibt sich aus dieser Antwort auf eine ähnliche Frage zum Senden von Daten über eine POST-Anfrage. Erstellen Sie zuerst eine "data" -Datei mit dem Namen "data.txt", die einfach die *. Führen Sie dann den folgenden curlBefehl aus:

curl -X POST -d @data.txt https://example.com/_config/cors/origins 

Das könnte man auch ohne das versuchen, -X POSTdie die Request-Methode so setzt:

curl -d @data.txt https://example.com/_config/cors/origins