「はい」のような無限のコマンドをどのように転送できますか?

「はい」のような無限のコマンドをどのように転送できますか?

私が知る限り、コマンドをAコマンドにパイプするとB実行され、A出力がB入力として使用されます。たとえば、一部のコマンドは無限ですが、yesこれらのコマンドの実行時間はそのコマンドを中断するまでです。配管作業はどうなりますか?

例: yes | sudo dnf install pkg

答え1

コマンドAは無限の出力を生成できますが、コマンドBは限られた量の出力のみを読み取ります。コマンドBが終了すると(または対応する入力ファイル記述子を閉じると)、パイプは削除されます。

その後、コマンドAからパイプへの書き込みを実行すると、カーネルはSIGPIPEコマンドAに信号を送信します。基本的な作業はSIGPIPEプロセスを終了することです。

関連情報