如何解决Bash:在管道中执行两个命令之间记录一条消息
编辑:感谢所有的答案。我现在明白我想要的是废话。
我有以下命令来下载和解压档案:
curl -fSL "$uri" | tar -xz
我想要的是在下载后显示一条消息,然后用 tar 解压下载的存档。
我知道可以将下载的存档保存到文件中,执行其他任何操作然后解压缩它。但是是否可以在不保存到文件的情况下执行此操作?使用标准输入和标准输出?
解决方法
您可以在 {}
完成后使用组 curl
打印一些内容。要在终端中显示消息而不将其传递给 tar
,我们可以通过任何未使用的文件描述符(此处为 3
)来路由它。
{ { curl -fSL "$uri"; echo "download complete" >&3; } | tar -xz; } 3>&1
由于 curl
和 tar
并行运行,后者可能会在打印 download complete
的同一瞬间完成。因此,一个简单的 curl -fSL "$uri" | tar -xz; echo "Everything done"
可能同样好。
在你的问题中你写了......
下载后显示一条消息然后解压下载的存档
如果您真的想暂停 tar
直到下载完成,那么您可以使用 GNU sponge
包中的 moreutils
。但是,这样做没有任何好处。
{ { curl -fSL "$uri"; echo "download complete" >&3; } | sponge | tar -xz; } 3>&1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。