![将 curl 的输出通过管道传输到 rpm2cpio](https://linux22.com/image/1347773/%E5%B0%86%20curl%20%E7%9A%84%E8%BE%93%E5%87%BA%E9%80%9A%E8%BF%87%E7%AE%A1%E9%81%93%E4%BC%A0%E8%BE%93%E5%88%B0%20rpm2cpio.png)
我下载了很多 srpm 来翻找,我以前总是花很多时间,
root@server$ curl rpm -o file.rpm
root@server$ rpm2cpio file.rpm | cpio -id
但这会留下一个丑陋的.rpm 文件,所以我尝试了一个单一管道
root@server$ curl rpm | rpm2cpio - | cpio -id
根据 curl 手册页,curl 默认输出到 stdout,而 rpm2cpio 手册页说,如果唯一的参数是 '-',那么它将从 stdin 读取。
但是我不断收到错误:
error: rpm2cpio: headerRead failed: hdr blob(23176): BAD, read returned 2696
error reading header from package
cpio: premature end of archive
0 5468k 0 13257 0 0 21912 0 0:04:15 --:--:-- 0:04:15 29791
curl: (23) Failed writing body (379 != 1348)
如果我尝试将下载的文件放入管道而不是使用 curl,那么它就可以工作。
现在我知道有很多方法可以解决这个问题,当我有时间的时候我可能会编写这个脚本。我只是好奇为什么 rpm 不喜欢 curl 输出的 rpm。
有任何想法吗?
答案1
事实证明,curl 和 wget 都会将一堆其他内容以及正在检索的文件发送到 stdout,因此在流上调用 rpm2cpio 时会出现错误。
明确使用标志-o -
会删除那些多余的东西,现在它可以正常工作。