【发布时间】:2021-06-29 15:49:30
【问题描述】:
编辑:感谢所有答案。我现在明白我要的是废话。
我有以下命令可以下载和解压缩档案:
curl -fSL "$uri" | tar -xz
我想要的是在下载后显示一条消息,然后用 tar 解压下载的存档。
我知道可以将下载的存档保存到文件中,然后执行其他任何操作然后解压缩。但是是否可以在不保存到文件的情况下做到这一点?使用标准输入和标准输出?
【问题讨论】:
-
对信息性消息使用标准错误,而不是标准输出。
-
你要求的东西是不可能的,因为这两个命令之间没有“之间”这样的东西。
curl和tar命令同时运行。当curl将下载的内容块写入其标准输出时,tar读取该内容并开始解包,而curl仍在忙于下载更多内容。 -
...现在,当然可以有一个额外的管道组件负责状态跟踪(与 curl 和 tar 同时运行),这是一项工作,有像
pv这样的预先存在的工具已经写好了。 -
管道就是管道。
tar在第一个字节下载完成后已经开始解包。 -
...并将其分成两部分,一个接一个地发生,这会比保持原样更慢。 (下载到内存不使用 I/O 带宽,解压也不依赖于网络带宽,所以同时做这两件事比在一台机器上一个接一个地做更有效地利用资源只有一个 CPU 内核;更不用说这意味着您不需要一个地方来存储下载但尚未解压的内容)。
标签: bash curl stdout stdin tar