Відповідно до цього , розміщення списку команд між фігурними дужками спричиняє виконання списку в поточному контексті оболонки. Не створено підкашлю .
Використовуючи, 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
трубопровід розміщується всередині фігурних дужок (тому два рівні дужки у всіх)
{ { 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
Чому bash
доводиться створювати підзарядку для запуску sleep
в третьому випадку, коли в документації зазначено, що команди між фігурними дужками виконуються в поточному контексті оболонки?
{ sleep 2 | command ps -H; }