Eu nunca pensei sobre como o shell realmente executa comandos canalizados. Sempre me disseram que o "stdout de um programa é canalizado para o stdin de outro", como uma maneira de pensar sobre os pipes. Então, naturalmente, pensei que, no caso de dizer, A | B, A seria executado primeiro, depois B obtém o desvio padrão de A e usa o desvio padrão de A como entrada.
Mas notei que quando as pessoas pesquisam um processo específico no ps, elas incluem grep -v "grep" no final do comando para garantir que o grep não apareça na saída final. Isso significa que no comando ps aux | grep "bash" | grep -v "grep", o que significa que o ps sabia que o grep estava em execução e, portanto, está na saída do ps. Mas se o ps terminar de executar antes que sua saída seja canalizada para grep, como ele sabia que o grep estava em execução?
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