単純なパイプラインがあるとしましょう。
a | b
たとえば、ログアウトしてください。ランダムな時間アクティブな状態を維持する(作業完了など)安定したa
方法はありますか?b
ベストアンサー1
b
終了で終了しませんa
。
$ { echo hello; } | { read message; printf 'got "%s"\n' "$message"; sleep 5; echo "ok, I'm done"; }
got "hello"
ok, I'm done
ここでa
(echo hello
)は単に文字列を出力して終了します。パイプ()の右側は、b
文字列を読み取って出力してからしばらく待機し、終了echo
する前に最後の操作を実行します。
b
終了時に終了する場合、a
必要な操作を実行する時間はまったくありません。唯一のものb
できないここで実行される作業は、標準入力からより多くのデータを読み取ることです(最後read
の追加データはすぐにファイルの終わりを取得します)。
内部にその他シナリオ(質問には記載されていません)、標準出力への書き込みを試みて(存在しないプロセスに進む)、終了すると(デフォルトでは)終了するb
前に信号が受信されます。a
a
PIPE
b
パイプへの書き込みを試みないと、a
完了するまで実行され続けます。