Nunca he pensado realmente cómo el shell realmente ejecuta comandos canalizados. Siempre me han dicho que el "stdout de un programa se canaliza al stdin de otro", como una forma de pensar en las tuberías. Entonces, naturalmente, pensé que en el caso de decir, A | B, A correría primero, luego B obtiene el stdout de A y usa el stdout de A como su entrada.
Pero he notado que cuando las personas buscan un proceso en particular en ps, incluyen grep -v "grep" al final del comando para asegurarse de que grep no aparezca en el resultado final. Esto significa que en el comando ps aux | grep "bash" | grep -v "grep", lo que significa que ps sabía que grep se estaba ejecutando y, por lo tanto, está en la salida de ps. Pero si ps termina de ejecutarse antes de que su salida se canalice a grep, ¿cómo sabía que grep se estaba ejecutando?
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