在命令行中,如果我输入
curl -s http://httpbin.org/get
或者
curl http://httpbin.org/get
我得到了相同的结果:
{
"args": {},
"headers": {
"Accept": "*/*",
"Host": "httpbin.org",
"User-Agent": "curl/7.63.0",
"X-Amzn-Trace-Id": "Root=1-5eb2c764-3e67fbd6113ee4c0e5bccd8a"
},
"origin": "109.11.151.178",
"url": "http://httpbin.org/get"
}
但是如果我使用管道来使用 curl 的结果,例如,我输入以下内容:
curl http://httpbin.org/get | grep -E '\d+'
然后我得到:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 255 100 255 0 0 1237 0 --:--:-- --:--:-- --:--:-- 1231
"User-Agent": "curl/7.63.0",
"X-Amzn-Trace-Id": "Root=1-5eb2c935-af183e03612a957bc5d1b48b"
"origin": "109.11.151.178",
如果我使用 curl 的“-s”选项,管道的结果会有所不同:
"User-Agent": "curl/7.63.0",
"X-Amzn-Trace-Id": "Root=1-5eb2c990-5b0d5bb00b3c8aff7acf8d79"
"origin": "109.11.151.178",
在网上搜索后,我发现 curl 的“-s”选项不会打印出进度条:
静默或安静模式。不显示进度表或错误消息。使 Curl 静音。它仍将输出您请求的数据,甚至可能输出到终端/标准输出,除非您重定向它。
- 但是“进度计”从何而来?
- 为什么当我使用“curl”或“curl -s”时“进度表”不显示?
- 为什么使用管道时会出现这种情况?
答案1
从man curl
:
进度表
curl
通常在操作过程中显示进度条,显示传输的数据量、传输速度和预计剩余时间等。[...] 如果你调用 curl 来执行某项操作,并且它即将把数据写入终端,它禁用进度表否则它会弄乱输出混合进度表和响应数据。