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

curl "someURL"
curl -o - "someURL"

但这在流水线上行不通:

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

它返回:

(23) Failed writing body

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


当前回答

如果你正在尝试类似source <(curl -sS $url)这样的东西,并得到(23)Failed writing body错误,这是因为在bash 3.2 (macOS的默认)中,源进程替换不起作用。

相反,您可以使用这个解决方案。

source /dev/stdin <<<"$( curl -sS $url )"

其他回答

所以这是编码的问题。Iconv解决了这个问题

curl 'http://www.multitran.ru/c/m.exe?CL=1&s=hello&l1=1' | iconv -f windows-1251 | tr -dc '[:print:]' | ...

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

Curl [url] >[文件]

用sudo尝试命令对我有用。例如:

sudo curl -O -k 'https url here'

注意:-O(这是大写o,不是零)& -k https url。

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

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

我得到这个错误试图使用jq时,我没有安装jq。所以…如果您尝试使用jq,请确保已安装jq。