Bash:记录管道中两个命令执行之间的消息
Bash: log a message between execution of two commands in a pipeline
编辑:感谢您的所有回答。我现在明白我要的是废话
我有以下命令来下载和解压缩存档文件:
curl -fSL "$uri" | tar -xz
我想要的是在下载后显示一条消息,然后用 tar 解压下载的压缩包。
我知道可以将下载的存档保存到文件中,执行任何其他操作然后取消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"
可能同样好。
在你的问题中你写了...
display a message after downloading and then unpack the downloaded archive
如果您真的想暂停 tar
直到下载完成,那么您可以使用 GNU moreutils
包中的 sponge
。但是,这样做没有任何好处。
{ { curl -fSL "$uri"; echo "download complete" >&3; } | sponge | tar -xz; } 3>&1
编辑:感谢您的所有回答。我现在明白我要的是废话
我有以下命令来下载和解压缩存档文件:
curl -fSL "$uri" | tar -xz
我想要的是在下载后显示一条消息,然后用 tar 解压下载的压缩包。
我知道可以将下载的存档保存到文件中,执行任何其他操作然后取消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"
可能同样好。
在你的问题中你写了...
display a message after downloading and then unpack the downloaded archive
如果您真的想暂停 tar
直到下载完成,那么您可以使用 GNU moreutils
包中的 sponge
。但是,这样做没有任何好处。
{ { curl -fSL "$uri"; echo "download complete" >&3; } | sponge | tar -xz; } 3>&1