ตามนี้ , วางรายการของคำสั่งระหว่างวงเล็บปีกกาทำให้เกิดรายการที่จะดำเนินการในบริบทเปลือกปัจจุบัน ไม่มี subshell จะถูกสร้างขึ้น
ใช้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
ต้องสร้าง subshell ให้ทำงานsleep
ในกรณีที่ 3 เมื่อเอกสารระบุว่าคำสั่งระหว่างวงเล็บปีกกาจะถูกดำเนินการในบริบทเชลล์ปัจจุบัน?
{ sleep 2 | command ps -H; }