Zgodnie z tym , umieszczenie listy poleceń między nawiasami klamrowymi powoduje, że lista jest wykonywana w bieżącym kontekście powłoki. Nie jest tworzona podpowłoka .
Za pomocą, ps
aby zobaczyć to w akcji
Jest to hierarchia procesów dla potoku procesu wykonywanego bezpośrednio w wierszu poleceń. 4398 to PID dla powłoki logowania:
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
Teraz postępuje zgodnie z hierarchią procesu dla potoku procesu między nawiasami klamrowymi wykonywanymi bezpośrednio w wierszu poleceń. 4398 to PID dla powłoki logowania. Jest to podobne do powyższej hierarchii udowadniającej, że wszystko jest wykonywane w bieżącym kontekście powłoki :
{ 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
Jest to hierarchia procesów, sleep
w której potok jest umieszczony wewnątrz nawiasów klamrowych (czyli w sumie dwa poziomy nawiasów klamrowych)
{ { 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
Dlaczego bash
trzeba utworzyć podpowłokę, aby działała sleep
w trzecim przypadku, gdy dokumentacja stwierdza, że polecenia między nawiasami klamrowymi są wykonywane w bieżącym kontekście powłoki?
{ sleep 2 | command ps -H; }