Ich möchte einen Curl-Befehl in zsh ausführen.
curl -X GET "https://api.cloudflare.com/client/v4/zones/<ZONE>" \
-H "Content-Type:application/json" \
-H "Authorization: Bearer <TOKEN>"
aber wenn ich dies ausführe, bekomme ich
{"success":false,"errors":[{"code":9106,"message":"Missing X-Auth-Email header"},{"code":9107,"message":"Missing X-Auth-Key header"}],"messages":[],"result":null}curl: (3) URL using bad/illegal format or missing URL
zsh: command not found: -H
zsh: command not found: -H
Außerdem bekomme ich die Fehlermeldung „Warum bekomme ich das zsh: command not found: -H
hin?“ angezeigt, das bedeutet, dass die Option -H
ignoriert wird.
Antwort1
Jedes \
in Ihrem Code entkommt einem darauffolgenden Leerzeichen. Entkommene Leerzeichen verhalten sich wie in Anführungszeichen gesetzte Leerzeichen. Nicht nur Ihr Code generiert Wörter, die Leerzeichen sind (und diese Wörter möchten Sie nicht). Die Backslashs entkommen Leerzeichen, also entkommen sie nicht Zeilenumbruchzeichen. Tatsächlich besteht Ihr Code aus drei separaten Befehlen; zwei davon beginnen mit -H
und ergeben keinen Sinn. Als ob Sie Folgendes ausführen würden:
curl -X GET "https://api.cloudflare.com/client/v4/zones/<ZONE>" ' '
-H "Content-Type:application/json" ' '
-H "Authorization: Bearer <TOKEN>"
Hier sind die Leerzeichen in Anführungszeichen gesetzt, in Ihrem Code werden sie maskiert. Das Ergebnis ist identisch.
Um einen Befehl in der nächsten Zeile fortzusetzen, müssen Sie das Zeilenumbruchzeichen escapen.
Entfernen Sie die Leerzeichen nach \
den Zeichen. Jeder Ihrer beiden Backslashs sollte vorkommensofortvor dem jeweiligen Newline-Zeichen. Dann werden die drei Zeilen als ein Befehl interpretiert.
Dies ist nicht spezifisch für zsh
.