Как заставить curl ждать ответа и затем продолжить выполнение кода - PullRequest
0 голосов
/ 08 октября 2019

У меня есть простой код:

HEADERS_FILE_NAME=headers.txt
FILE=body.xml

echo "start getting"
curl -D $HEADERS_FILE_NAME -o $FILE --fail http://<SOMEURLHERE>:7001/articles?indexingInfoId=4&format=xml 2>/dev/null
echo "end getting"

Вывод:

start getting
end getting
root@prod_l04:~#   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  166M    0  166M    0     0  14.5M      0 --:--:--  0:00:11 --:--:-- 34.9M

Вопрос: как заставить curl ждать, когда ответ будет получен, и затем выполнить "echo "end getting" "

1 Ответ

0 голосов
/ 08 октября 2019

URL не заключен в кавычки и содержит амперсанд (&);поэтому оболочка читает эту строку как:

curl -D $HEADERS_FILE_NAME -o $FILE --fail http://:7001/articles?indexingInfoId=4 </code><b>&</b><code> format=xml 2>/dev/null

и, таким образом, запускает curl в фоновом режиме. Поскольку format=xml 2>/dev/null является допустимой командной строкой, вы не получите от нее ошибки.

См.
Справочное руководство Bash § Цитирование и,
Справочник BashРуководство § Списки
для получения дополнительной информации.

А вот рабочая, безопасная версия вашего скрипта с правильной цитатой:

HEADERS_FILE_NAME='headers.txt'
FILE='body.xml'

echo 'start getting'
curl -D "$HEADERS_FILE_NAME" -o "$FILE" --fail 'http://<SOMEURLHERE>:7001/articles?indexingInfoId=4&format=xml' 2>/dev/null
echo 'end getting'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...