Как использовать переменную bash для @filepath в команде curl

371
medium

Я пытаюсь написать bash-скрипт для запуска серии команд curl. Команда, которую я пытаюсь выполнить, такова:

curl -XPUT $URL'/test/' -d @$DATA_DIR/index-settings.json 

Это мой bash скрипт

#!/bin/bash set -e  DATA_DIR="/usr/local/es" URL="http://localhost:9200"  curl -XPUT $URL'/test/' -d @$DATA_DIR/index-settings.json 

Я подтвердил, что команда работает, если я запускаю ее вручную так:

curl -XPUT 'http://localhost:9200/test/' -d @/usr/local/es/index-settings.json 

Проблема из $ DATA_DIR. Когда я запускаю скрипт bash с переменной $ DATA_DIR, я получаю эту ошибку:

Warning: Couldn't read data from file  Warning: "/usr/local/es/index-settings.json", this makes  Warning: an empty POST. 

Можно ли использовать переменную в команде curl, которая использует -d @ arguments?

0
В тексте предупреждения упоминается правильный путь, не так ли? Итак, `curl` понял, переменная была правильно расширена. Кажется, потому что, возможно, переменная и / или команда в скрипте содержит непечатаемые символы. Проверьте скрипт с помощью `xxd -g 1 yourscript`; Есть ли байт, начинающийся с `0` и не являющийся` 0a`? Может быть, `0d`? // Вы запускаете скрипт как другой пользователь? Является ли `/ usr / local / es / index-settings.json` читаемым для пользователя, запускающего скрипт? Kamil Maciorowski 5 лет назад 3
Запуск `set -x` перед этим разделом скрипта также может указывать на то, что происходит - он будет печатать команды (или их эквиваленты) по мере их выполнения с такими вещами, как непечатные символы в видимой форме. Кстати, обычно хорошей идеей является размещение двойных кавычек вокруг ссылок на переменные (и строк, в которые они включены), как в `curl -XPUT" $ URL / test / "-d" @ $ DATA_DIR / index-settings.json "` Gordon Davisson 5 лет назад 1
@KamilMaciorowski спасибо, что сделали свое дело! Был байт, который начинался с 0. medium 5 лет назад 0
Вы должны `/ usr / local / es / index-settings.json` и убедиться, что он не пустой. Кроме того, вы должны использовать двойные кавычки вокруг переменных, например `curl -XPUT" $ URL / test / "...`. Также см. [Как использовать Shellcheck] (http://github.com/koalaman/shellcheck), [Как отлаживать bash-скрипт?] (Http://unix.stackexchange.com/q/155551/56041) (U & L .SE), [Как отладить bash-скрипт?] (Http://stackoverflow.com/q/951336/608639) (SO), [Как отладить bash-скрипт?] (Http://askubuntu.com/q / 21136) (AskU), [Отладка скриптов Bash] (http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html) и т. Д. jww 5 лет назад 0

0 ответов на вопрос