Kabuğun gerçekte borulanmış komutları nasıl yürüttüğünü hiç düşünmedim. Hep "Bir programın stdout'u alır söylendi borulu boru düşünmenin bir yolu olarak, diğerinin stdin içine". Doğal olarak, sanırım, A | B, A önce çalışır, sonra B A'nın stdout'unu alır ve A'nın stdout'unu girdi olarak kullanır.
Ancak, insanlar ps'de belirli bir işlem aradıklarında, komutun sonunda grep'in son çıktıda görünmediğinden emin olmak için grep -v "grep" içerdiklerini farkettim. Bunun anlamı ps aux | grep "bash" | grep -v "grep", yani ps'nin grep'in çalıştığını ve dolayısıyla ps'in çıktısında olduğunu bildiği anlamına gelir. Fakat ps, çıkışı grep'e aktarılmadan önce çalışmayı bitirirse, grep'in çalıştığını nereden biliyordu?
flamingtoast@FTOAST-UBUNTU: ~$ ps | grep ".*"
PID TTY TIME CMD
3773 pts/0 00:00:00 bash
3784 pts/0 00:00:00 ps
3785 pts/0 00:00:00 grep