如何使curl等待响应然后继续执行代码

时间:2019-10-08 09:23:13

标签: bash ubuntu curl

我有一个简单的代码:

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 :(得分:0)

该URL未加引号,并包含一个&符号(&);因此,shell将该行读为:

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

,因此在后台运行curl。由于format=xml 2>/dev/null是有效的命令行,因此不会出现错误。

请参阅
Bash Reference Manual § Quoting
Bash Reference Manual § Lists
以获得更多信息。

以下是带引号的脚本的安全工作版本:

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'
相关问题