よれば、この、中括弧の間のコマンドのリストを確定すると、リストは、現在のシェルのコンテキスト内で実行されるようにします。サブシェルは作成されません。
ps
これを実際に使用して見る
これは、コマンドラインで直接実行されるプロセスパイプラインのプロセス階層です。4398は、ログインシェルのPIDです。
sleep 2 | ps -H;
PID TTY TIME CMD
4398 pts/23 00:00:00 bash
29696 pts/23 00:00:00 sleep
29697 pts/23 00:00:00 ps
コマンドラインで直接実行される中括弧間のプロセスパイプラインのプロセス階層に従います。4398は、ログインシェルのPIDです。これは、すべてが現在のシェルコンテキストで実行されることを証明する上記の階層に似ています。
{ sleep 2 | ps -H; }
PID TTY TIME CMD
4398 pts/23 00:00:00 bash
29588 pts/23 00:00:00 sleep
29589 pts/23 00:00:00 ps
これは、sleep
パイプライン自体が中かっこ内に配置されている場合のプロセス階層です(つまり、2レベルのかっこ)
{ { sleep 2; } | ps -H; }
PID TTY TIME CMD
4398 pts/23 00:00:00 bash
29869 pts/23 00:00:00 bash
29871 pts/23 00:00:00 sleep
29870 pts/23 00:00:00 ps
ドキュメンテーションに中括弧間のコマンドが現在のシェルコンテキストで実行されると記載されている場合、3番目のケースでbash
実行するサブシェルを作成する必要があるのはなぜsleep
ですか?
{ sleep 2 | command ps -H; }