curl 在通过管道传输到 head 命令时出错

Eva*_*ahn 6 curl pipe stream head

这很好用,没有错误:

$ curl -sSL https://coinbase.com/api/v1/prices/historical
2014-04-27T18:19:17-07:00,430.52
2014-04-27T18:10:24-07:00,436.25
2014-04-27T17:56:57-07:00,436.14
...
Run Code Online (Sandbox Code Playgroud)

这给出了以下错误:

$ curl -sSL https://coinbase.com/api/v1/prices/historical | head -n 1
2014-04-27T18:19:17-07:00,430.52
curl: (23) Failed writing body (0 != 186)
Run Code Online (Sandbox Code Playgroud)

当我通过管道传输grep和时它不会失败tail,但是当我通过管道传输时失败head(即使没有参数)。

我得到了我想要的,但它给出了一个错误。最后一个数字(上例中的 186)每次都会改变。我又运行了 3 次,结果分别是 1650、3988 和 923。

我试过用这个-B选项运行它。如果有帮助,我在 OSX 10.9 上。我没有~/.curlrc。这是输出curl --version

curl 7.30.0 (x86_64-apple-darwin13.0) libcurl/7.30.0 SecureTransport zlib/1.2.5
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smtp smtps telnet tftp
Features: AsynchDNS GSS-Negotiate IPv6 Largefile NTLM NTLM_WB SSL libz
Run Code Online (Sandbox Code Playgroud)

这里出了什么问题?

Dre*_*rew 11

headcurl在写入完成之前关闭管道。您可以使用 -N 标志禁用curl中的缓冲,从而使所有输出以一大块的形式写入管道,以便能够head对整个响应进行操作:

curl -sNL https://coinbase.com/api/v1/prices/historical | head -n 1
Run Code Online (Sandbox Code Playgroud)