Pipe

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

  • December 3, 2021

下面創建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還是被吐sha256sumsudo如果可行,我寧願避免使用。我如何將 的輸出定向wgettarsha256sum

您可以重定向 to 的輸出sha256sum/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

我不知道它為什麼會起作用,只是反複試驗。

引用自:https://unix.stackexchange.com/questions/680079