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

curl "someURL"
curl -o - "someURL"

但这在流水线上行不通:

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

它返回:

(23) Failed writing body

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


当前回答

因为我自己的打字错误,我也有同样的问题:

# fails because of reasons mentioned above
curl -I -fail https://www.google.com | echo $? 
curl: (23) Failed writing body

# success
curl -I -fail https://www.google.com || echo $?

其他回答

你可以这样做,而不是使用-o选项:

Curl [url] >[文件]

另一种可能是,如果使用-o(输出文件)选项,目标目录不存在。

如。如果你有-o /tmp/download/abc.txt且/tmp/download不存在。

因此,确保任何需要的目录都是预先创建/存在的,使用——create-dirs选项,必要时使用-o

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

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

因为我自己的打字错误,我也有同样的问题:

# fails because of reasons mentioned above
curl -I -fail https://www.google.com | echo $? 
curl: (23) Failed writing body

# success
curl -I -fail https://www.google.com || echo $?

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

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错误。