쉘이 실제로 파이프 명령을 실행하는 방법에 대해 생각한 적이 없습니다. 나는 파이프 에 대해 생각하는 방식으로 " 한 프로그램의 stdout이 다른 프로그램 의 stdin에 파이프 된다 "고 항상 들었습니다 . 그래서 당연히 나는 A | B, A가 먼저 실행 된 다음 B는 A의 표준 출력을 가져오고 A의 표준 출력을 입력으로 사용합니다.
그러나 사람들이 ps에서 특정 프로세스를 검색 할 때 명령 끝에 grep -v "grep"을 포함하여 grep이 최종 출력에 나타나지 않도록합니다. 이것은 명령 ps aux | grep "bash"| grep -v "grep"은 ps가 grep이 실행 중임을 알고 ps의 출력에 있음을 의미합니다. 그러나 출력이 grep으로 파이프되기 전에 ps가 실행을 마치면 grep이 실행되고 있음을 어떻게 알 수 있습니까?
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