我有一个简单的代码:
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"
”
答案 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'