2016-05-15 3 views
0

Я пытаюсь получить файлы из конкретной папки, загружать их с завитком и получить результат в переменный:Баша: динамическая строка для завитка

#!/bin/bash 
shopt -s nullglob 
FILES=* 
for f in $FILES 
do 
    core=$f 
    #echo "curl -H \"Content-Type: application/json\" --data-binary @$f http://v-cdh-master:8983/solr/$core/update/json?commit=true" 
    result=$(curl -H "Content-Type: application/json" -s --data-binary @$f http://v-cdh-master:8983/solr/$core/update/json?commit=true) 
done 

В результате выполнения этого сценария является

curl: no URL specified! 
curl: try 'curl --help' or 'curl --manual' for more information 

Если удалить комментарий от эха строки я мог видеть действительный URL как этого

curl -H "Content-Type: application/json" --data-binary @affiliates_multival http://v-cdh-master:8983/solr/affiliates_multival/update/json?commit=true 

который работает идеально, когда я копировать/вставить я t к терминалу.

Где моя ошибка?

ответ

2

URL-адрес ? в URL-адресе приводит к тому, что весь аргумент рассматривается как глобальный, который не соответствует файлу. Поскольку у вас включена опция nullglob, слово будет удалено из вызова до curl. Цитирование аргумента, как и в случае с командой echo, разрешит проблему, предотвратив создание пути.

result=$(curl -H "Content-Type: application/json" -s --data-binary @"$f" "http://v-cdh-master:8983/solr/$core/update/json?commit=true") 
+0

спасибо. Он отлично работает для меня. –