我下载了很多 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 -
会删除那些多余的东西,现在它可以正常工作。