curl命令管道到head/tail后出现curl: (23) Failure writing output to destination错误的解决咨询
curl命令管道到head/tail后出现curl: (23) Failure writing output to destination错误的解决咨询
别担心,这个报错其实不是curl的bug,也不是你的操作有问题——本质是管道的正常行为导致的:
当你把curl的输出管道给head -30时,head在读取完前30行内容后,会立刻关闭它的输入管道(也就是curl的输出管道)。但这时候curl可能还在继续从API获取数据,并且尝试往已经关闭的管道里写内容,这种写入失败就触发了curl的23号错误。而你能正常拿到前30行,说明管道的有效数据传输已经完成,这个报错只是curl对“管道被提前关闭”的反应而已。
针对这个情况,你可以试试这几个实用的解决办法:
直接忽略错误输出:既然你已经拿到了需要的内容,只是不想看到烦人的报错信息,可以把curl的错误输出重定向到/dev/null,命令改成:
curl my_api_call 2>/dev/null | head -30这样就只会显示前30行结果,不会再弹出那个错误提示了。
让curl优雅处理管道关闭:有些场景下,你可以通过设置环境变量让curl忽略管道关闭的信号,执行命令前先运行:
export CURLOPT_NOSIGNAL=1之后再执行你的curl+head命令,不过这种方法不如第一种直接简单,大多数情况下第一种方案就足够解决问题了。
另外你提到重装curl没用,这很正常,因为这根本不是curl本身的问题,而是Unix/Linux管道的工作机制导致的,重装自然解决不了~
备注:内容来源于stack exchange,提问作者questionto42




