作为一个单独的工具,它工作得很好:

curl "someURL"
curl -o - "someURL"

但这在流水线上行不通:

curl "someURL" | tr -d '\n'
curl -o - "someURL" | tr -d '\n'

它返回:

(23) Failed writing body

管道cURL输出的问题是什么?如何缓冲整个cURL输出,然后处理它?


当前回答

就我而言,我在做: Curl <blabla> | jq | grep <blibli>

用jq。它工作:curl <blabla> | jq。| grep <blibli>

其他回答

对于完整性和将来的搜索:

这取决于cURL如何管理缓冲区,缓冲区使用-N选项禁用输出流。

例子: curl -s -N "URL" | grep -q欢迎

在我的情况下,服务器耗尽了磁盘空间。

用df -k检查它。

当我尝试两次通过tac进行管道处理时,我被提醒磁盘空间不足,如另一个答案:https://stackoverflow.com/a/28879552/336694中所描述的那样。它向我显示了错误消息写错误:设备上没有剩余空间。

我在做的时候也遇到了同样的问题:

curl - l https://packagecloud.io/golang-migrate/migrate/gpgkey | apt-key add -

上面的查询需要使用根权限执行。

用下面的方法解决了这个问题:

curl - l https://packagecloud.io/golang-migrate/migrate/gpgkey | sudo apt-key add -

如果在curl之前编写sudo,则会得到Failed writing body错误。

我犯了同样的错误,但原因不同。在我的情况下,我有(tmpfs)分区只有1GB空间,我正在下载大文件,最终填满了该分区上的所有内存,我得到了和你一样的错误。

对我来说,这是许可问题。Docker运行是使用用户配置文件调用的,但root是容器内的用户。解决方案是让curl写入/tmp,因为它对所有用户都有写权限,而不仅仅是根用户。

我使用了-o选项。

- o / tmp / file_to_download