太陽光発電はどのように機能しますか?

太陽光発電はどのように機能しますか?

次のコマンドはどのように機能しますか?

pv file.tar.gz | tar -xz

私の理解によると、パイプ演算子はパイプの最後に、およびのマッピングを作成し、そのマッピングは、および両方に|存在します。pipestdoutpvO_WRONLYtarstdinO_RDONLYO_WRONLYO_RDONLYpipefs

これはすべて素晴らしいですが、私の画面に次のものが印刷されます。

31.1MiB 0:00:05 [6.17MiB/s] [===================================>] 100%

私が知る限り、この進行状況バーはによって生成されません。tarなぜなら、使用オプションがあるでしょうし、不要なので生成する必要があるpvからです。pvしかし、どのように?にマップされpvます。stdoutO_WRONLY

私もいくつかのシェルが使用していることを読みました。ソケットペア交換するパイプpipefsソケットペア双方向に進みます。ただし、これはどちらか一方または両方が完了するまでstdin2つのコマンドを束ねているようです。stdout上記の例では、進行状況バーはリアルタイムで更新されるため、そうではありません。

ベストアンサー1

pv進行状況バーは標準エラーに記録される機能です。pvマニュアルから:

pvは、経過時間、完了率(進行状況バーを含む)、現在のスループット、送信された合計データ、到着予定時刻などの情報を提供し、パイプラインを介したデータの進行状況を表示します。

これを使用するには、2つのプロセス間のパイプに挿入し、適切なオプションを使用します。標準入力は標準出力に渡され、進行状況は標準エラーに表示されます。

しかし、標準出力と標準エラーのリダイレクト中にTTYへの書き込みに問題はありません。

$ ( echo "out"; echo "error" >&2; echo "hi there" >$(tty) ) 2>&1 | cat >file
hi there

$ cat file
out
error

さらに、O_WRONLYandO_RDONLYは名詞ではなく形容詞です。標準出力は書き込み専用で、標準入力は読み取り専用です。

おすすめ記事