我如何将“wget -qO-whatever.tar.gz”的输出定向到 tar 和 sha256sum?

我如何将“wget -qO-whatever.tar.gz”的输出定向到 tar 和 sha256sum?

以下内容创建csfile并解压其中的哈希值go1.17.4.linux-amd64.tar.gz 从Golang官网下载,将校验和打印到标准输出,然后删除不再需要的csfile

wget -qO- https://go.dev/dl/go1.17.4.linux-amd64.tar.gz|tee >(sha256sum>csfile) |tar -xz && cat csfile && rm csfile

我想在屏幕上获取校验和并解压存档,而不创建像csfile.可行吗?基于一些 研究那个我确实尝试过以下两个单行(无济于事 - 尽管存档被解压,二进制输出被吐出到屏幕上):

wget -qO- https://go.dev/dl/go1.17.4.linux-amd64.tar.gz|tee >(sha256sum) >(sudo tar -xz>/dev/null)
wget -qO- https://go.dev/dl/go1.17.4.linux-amd64.tar.gz|tee >(sudo tar -xz>/dev/null) >(sha256sum)

另一方面,以下两个单行代码都不会打包存档,但它们都会在吐出二进制输出后生成校验和:

wget -qO- https://go.dev/dl/go1.17.4.linux-amd64.tar.gz|tee >(xargs tar -xz) >(sha256sum)
wget -qO- https://go.dev/dl/go1.17.4.linux-amd64.tar.gz|tee >(sudo xargs tar -xz>/dev/null) >(sha256sum)

为什么二进制输出会显示在屏幕上?是被吐tar还是被吐sha256sum?如果可能的话我宁愿避免使用sudo。我如何将 的输出定向wgettarsha256sum

答案1

sha256sum您可以将to的输出重定向/dev/tty到将其打印在屏幕上,例如:

wget -qO- https://go.dev/dl/go1.17.4.linux-amd64.tar.gz|tee >(sha256sum > /dev/tty) |tar -xz

看起来下面的代码也可以工作,只需将 tar 放在进程替换中,将 sha256sum 放在管道后面即可。在我的计算机上,二进制输出不会输出到屏幕上。

wget -qO- https://go.dev/dl/go1.17.4.linux-amd64.tar.gz | tee >(tar -xz) | sha256sum

我不知道为什么它有效或无效,只是反复试验。

相关内容