"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ベースで一部 それを勉強する私は次の2つの行コードを試しました(役に立ちません。アーカイブの解凍とバイナリ出力が画面に飛び出しましたが)。

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)

一方、次の2つのシングルライナーのいずれもアーカイブを圧縮しませんが、両方ともバイナリ出力を吐き出してチェックサムを生成します。

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。のwget出力をどのように指示しますか?tarsha256sum

ベストアンサー1

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

なぜ動作するのか、動作しないのかわかりません。試行錯誤だけあるだけです。

おすすめ記事