Ich habe also ein sehr einfaches Bash-Skript, das für einen Header an einen Auth-Server gelockt wird. Die Header-URL wird in eine Variable geschrieben und dann beim nächsten Curl-Aufruf verwendet. Bei Verwendung des var-Sets beim ersten curl-Aufruf erhalte ich "curl: (3) Illegale Zeichen in URL". Ich kann die var wiederholen und alles sieht gut aus, ich kann sogar die var zurücksetzen (in meinem Beispiel unten) und es funktioniert.
Das Bash-Skript
URL=$(curl -i -X GET -H "X-Auth-User: MyUserna,e" -H "X-Auth-Key: MyAPIKey" "https://urlToAuthServer.tld/auth/v1.0/" | grep "X-Storage-Url:" | awk '{print $2}')
curl -X GET -H "X-Auth-Token: MyAuthTok" "${URL}/folder/myfile.txt" -o ./myfile.txt
Beim Ausführen des obigen Beispiels bekomme ich:
curl: (3) Illegal characters found in URL
Die URL var sieht so aus (keine unzulässigen Zeichen)
https://somesecureurl.com/auth/AUTH_67383834-45245453-g34g34t5-34534
Wenn ich dies im Terminal mache, funktioniert es:
$ URL = $ (curl -i -X GET -H "X-Auth-Benutzer: MyUserna, e -H-X-Auth-Key: MyAPIKey" " https: //urlToAuthServer.tld/auth/v1 .0 / "| grep" X-Storage-Url: "| awk '{print $ 2}')
$ echo $ URL
https://somesecureurl.com/auth/AUTH_67383834-45245453-g34g34t5-34534
Jetzt kopiere und füge ich den String ein und ordne ihn erneut der URL zu (wieder alle im Terminal):
>$ URL="https://somesecureurl.com/auth/AUTH_67383834-45245453-g34g34t5-34534"
>$ curl -X GET -H "X-Auth-Token: MyAuthTok" "${URL}/folder/myfile.txt" -o ./myfile.txt
Es klappt.
Warum bekomme ich im ersten Beispiel den Fehler "curl: (3) Illegal zeichen in URL gefunden"?
Update Ich habe Folgendes ausgeführt: printf %s "$URL" | xxd
Hier ist die Ausgabe (adressiert geändert bis Sie die Idee bekommen)
0000000: 6874 7470 733a 2f2f 6461 6c30 352e 6f62 https://server.ob
0000010: 6a65 6374 7374 6f72 6167 652e 736f 6674 jectstorage.lite
0000020: 6c61 7965 722e 6e65 742f 7631 2f41 5554 sabers.com/v1/AUT
0000030: 485f 6665 3235 3339 3434 2d38 6433 322d H_aE2563981-7d32-
0000040: 3432 3138 2d61 6566 632d 6665 6638 3465 4201-bdoi-fef94a
0000050: 6166 3331 6232 0d ag11c8.
Die $ URL enthält am Ende einen \r
(CR) (0d
). Entferne es mit
URL=${URL%$'\r'}
vor der Verwendung mit curl
.
Ich hatte das gleiche Problem, aber es wurde dadurch verursacht, dass ich das Skript über Windows erstellt hatte, was bedeutete, dass das Zeilenende unnötig war.
Eine einfache DOS-Unix-Konvertierung behebte das Problem.
dos2unix <scriptname>
Es könnte sich um eine Eingabe am Ende der Datei handeln. Versuchen Sie es zu entfernen oder zu löschen. Beachten Sie, dass das eingegebene Zeichen nicht für die Anzeige geeignet ist.