微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Bash:在管道中执行两个命令之间记录一条消息

如何解决Bash:在管道中执行两个命令之间记录一条消息

编辑:感谢所有的答案。我现在明白我想要的是废话。

我有以下命令来下载和解压档案:

curl -fSL "$uri" | tar -xz

我想要的是在下载后显示一条消息,然后用 tar 解压下载的存档。

我知道可以将下载的存档保存到文件中,执行其他任何操作然后解压缩它。但是是否可以在不保存到文件的情况下执行此操作?使用标准输入和标准输出

解决方法

您可以在 {} 完成后使用组 curl 打印一些内容。要在终端中显示消息而不将其传递给 tar,我们可以通过任何未使用的文件描述符(此处为 3)来路由它。

{ { curl -fSL "$uri"; echo "download complete" >&3; } | tar -xz; } 3>&1

由于 curltar 并行运行,后者可能会在打印 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 举报,一经查实,本站将立刻删除。