Theo đó , việc đặt một danh sách các lệnh giữa các dấu ngoặc nhọn làm cho danh sách được thực thi trong bối cảnh shell hiện tại. Không có subshell được tạo ra .
Sử dụng ps
để thấy điều này trong hành động
Đây là hệ thống phân cấp quy trình cho một đường ống quy trình được thực hiện trực tiếp trên dòng lệnh. 4398 là PID cho shell đăng nhập:
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
Bây giờ tuân theo hệ thống phân cấp quy trình cho một đường ống quy trình giữa các dấu ngoặc nhọn được thực hiện trực tiếp trên dòng lệnh. 4398 là PID cho vỏ đăng nhập. Nó tương tự như hệ thống phân cấp ở trên chứng minh rằng mọi thứ được thực thi trong bối cảnh shell hiện tại :
{ 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
Bây giờ, đây là hệ thống phân cấp quy trình khi chính sleep
đường ống được đặt bên trong dấu ngoặc nhọn (vì vậy tất cả hai cấp độ của dấu ngoặc nhọn)
{ { 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
Tại sao bash
phải tạo một lớp con để chạy sleep
trong trường hợp thứ 3 khi tài liệu nói rằng các lệnh giữa các dấu ngoặc nhọn được thực thi trong ngữ cảnh shell hiện tại?
{ sleep 2 | command ps -H; }