Как использовать переменную bash для @filepath в команде curl
416
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?
В тексте предупреждения упоминается правильный путь, не так ли? Итак, `curl` понял, переменная была правильно расширена. Кажется, потому что, возможно, переменная и / или команда в скрипте содержит непечатаемые символы. Проверьте скрипт с помощью `xxd -g 1 yourscript`; Есть ли байт, начинающийся с `0` и не являющийся` 0a`? Может быть, `0d`? // Вы запускаете скрипт как другой пользователь? Является ли `/ usr / local / es / index-settings.json` читаемым для пользователя, запускающего скрипт?
Kamil Maciorowski 6 лет назад
3
Запуск `set -x` перед этим разделом скрипта также может указывать на то, что происходит - он будет печатать команды (или их эквиваленты) по мере их выполнения с такими вещами, как непечатные символы в видимой форме. Кстати, обычно хорошей идеей является размещение двойных кавычек вокруг ссылок на переменные (и строк, в которые они включены), как в `curl -XPUT" $ URL / test / "-d" @ $ DATA_DIR / index-settings.json "`
Gordon Davisson 6 лет назад
1
@KamilMaciorowski спасибо, что сделали свое дело! Был байт, который начинался с 0.
medium 6 лет назад
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 6 лет назад
0
0 ответов на вопрос
Похожие вопросы
-
2
.profile в Mac OS X?
-
1
Приостановить все, кроме x задач, интенсивно использующих процессор
-
10
Как я могу найти в истории bash и повторно запустить команду?
-
-
2
Можно ли передать выходные данные одной команды двум другим командам?
-
8
Переименуйте группу файлов одной командой
-
2
Почему мой путь не обновляется * сейчас *?
-
5
Как удалить символическую ссылку на каталог?
-
8
Спаси меня от бессмысленного терминала
-
9
Как можно добавить номер строки и табуляцию к каждой строке текстового файла?
-
1
Когда я должен положить конфигурации в .bashrc против. .bash_profile?