Wie verwendet man eine bash-Variable für den @ filepath in einem curl-Befehl?
577
medium
Ich versuche, ein Bash-Skript zu schreiben, um eine Reihe von Curl-Befehlen auszuführen. Der Befehl, den ich ausführen möchte, lautet wie folgt:
curl -XPUT $URL'/test/' -d @$DATA_DIR/index-settings.json
Dies ist mein Bash-Skript
#!/bin/bash set -e DATA_DIR="/usr/local/es" URL="http://localhost:9200" curl -XPUT $URL'/test/' -d @$DATA_DIR/index-settings.json
Ich habe bestätigt, dass der Befehl funktioniert, wenn ich ihn wie folgt manuell ausführen:
curl -XPUT 'http://localhost:9200/test/' -d @/usr/local/es/index-settings.json
Das Problem stammt aus dem $ DATA_DIR. Wenn ich das Bash-Skript mit der Variablen $ DATA_DIR ausführen, erhalte ich diesen Fehler:
Warning: Couldn't read data from file Warning: "/usr/local/es/index-settings.json", this makes Warning: an empty POST.
Ist es möglich, eine Variable innerhalb eines curl-Befehls zu verwenden, der -d @ -Argumente verwendet?
Der Warntext erwähnte den richtigen Weg, nicht wahr? `Curl` hat es also verstanden, die Variable wurde richtig erweitert. Scheinbar, weil die Variable und / oder der Befehl im Skript nicht druckbare Zeichen enthält. Überprüfen Sie das Skript mit `xxd -g 1 yourscript`. Gibt es ein Byte, das mit "0" beginnt und nicht "0a" ist? Gibt es vielleicht '0d'? // Führen Sie das Skript als anderer Benutzer aus? Ist `/ usr / local / es / index-settings.json` für den Benutzer lesbar, der das Skript ausführt?
Kamil Maciorowski vor 6 Jahren
3
Wenn Sie `set -x` vor diesem Abschnitt des Skripts ausführen, wird möglicherweise auch darauf hingewiesen, was los ist - es werden die Befehle (oder deren Entsprechung) ausgegeben, während sie ausgeführt werden, wobei nicht druckbare Zeichen in sichtbarer Form angezeigt werden. Übrigens, es ist im Allgemeinen eine gute Idee, doppelte Anführungszeichen um variable Referenzen (und Strings, die diese enthalten) zu setzen, wie in `curl -XPUT" $ URL / test / "-d" @ $ DATA_DIR / index-settings.json "`
Gordon Davisson vor 6 Jahren
1
@ KamilMaciorowski Danke das hat den Trick gemacht! Es gab ein Byte, das mit 0 begann.
medium vor 6 Jahren
0
Sie sollten `/ usr / local / es / index-settings.json` und sicherstellen, dass es nicht leer ist. Sie sollten auch doppelte Anführungszeichen für Variablen verwenden, wie zum Beispiel `curl -XPUT" $ URL / test / "...`. Siehe auch [So verwenden Sie Shellcheck] (http://github.com/koalaman/shellcheck), [So debuggen Sie ein Bash-Skript?] (Http://unix.stackexchange.com/q/155551/56041) (U & L .SE), [So debuggen Sie ein Bash-Skript?] (Http://stackoverflow.com/q/951336/608639) (SO), [Wie debuggen Sie ein Bash-Skript?] (Http://askubuntu.com/q.) / 21136) (AskU), [Debuggen von Bash-Skripts] (http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html) usw.
jww vor 6 Jahren
0
0 Antworten auf die Frage
Verwandte Probleme
-
1
Pausieren Sie alle Aufgaben außer x CPU-intensiven Aufgaben
-
10
Wie kann ich die Bash-Historie durchsuchen und einen Befehl erneut ausführen?
-
2
Kann die Ausgabe eines Befehls an zwei andere Befehle weitergeleitet werden?
-
8
Benennen Sie eine Gruppe von Dateien mit einem Befehl um
-
2
Warum aktualisiert sich mein Pfad nicht * jetzt *?
-
5
Wie entferne ich einen symbolischen Link zu einem Verzeichnis?
-
8
Rette mich vor dem Kauderwelsch
-
9
Wie kann ich jeder Zeile einer Textdatei eine Zeilennummer und einen Tabulator voranstellen?
-
1
Wann sollte ich Konfigurationen in .bashrc vs einfügen? .bash_profile?
-
1
Umleitung: Wie kam das zusätzliche Wort in die Datei?