GNU/Linux >> Linux の 問題 >  >> Linux

このシェル パイプラインが終了するのはなぜですか?

パイピングは、1 つのプロセス A の出力を B の入力に接続することによって機能します。

  • A はその出力を閉じます。 B は EOF を取得します。
  • B はその入力を閉じます。 A は、次のバイトを書き込もうとすると、出力が利用できないというエラーを受け取ります。

これらの 2 つのケースは非常に一般的であるため、処理は C 標準ライブラリに移動されました。


head 必要な量を読み取った後、入力ファイルを閉じます。パイプが片側から閉じられると、反対側で書き込みエラーが発生します。これにより base64 が発生します 閉じると、cat が発生します。 閉じる。


base64 の後 出力 10 バイト、head 十分な入力と終了を取得します。前者がさらにバイトを出力しようとすると、SIGPIPE シグナルを受信するため、終了します。同じ理由で、 cat 順番に終了します。


Linux
  1. Bashrcが現在のシェルがインタラクティブであるかどうかをチェックするのはなぜですか?

  2. Ssh -tオプションがリダイレクト出力にCrとLfを追加するのはなぜですか?

  3. これが「読み取り中」にターミナルで機能するのに、シェルスクリプトでは機能しないのはなぜですか?

  1. 「ls」を実行するために別のプロセスが必要なのはなぜですか?

  2. Ls-lがLs-sとは異なるサイズを出力するのはなぜですか?

  3. TMOUT – アクティビティがない場合に Unix シェルを自動的に終了する

  1. 「bin」ユーザーにログインシェルが必要なのはなぜですか?

  2. シェル スクリプト while ループ:[ パイプラインの周りに `]' がありません

  3. なぜ rm マニュアルは引数なしで実行できると言っているのに、これは正しくないのですか?