为什么“curl -s”和“curl”会给出相同的结果?

为什么“curl -s”和“curl”会给出相同的结果?

在命令行中,如果我输入

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”或“c​​url -s”时“进度表”不显示?
  • 为什么使用管道时会出现这种情况?

答案1

man curl

进度表
curl通常在操作过程中显示进度条,显示传输的数据量、传输速度和预计剩余时间等。

[...] 如果你调用 curl 来执行某项操作,并且它即将把数据写入终端,它禁用进度表否则它会弄乱输出混合进度表和响应数据。

相关内容