스크립트에서 파이프를 사용할 때 쉘이 출력을 어떻게 또는 어떻게 억제할 수 있습니까? 코드가 있다고 가정 해 봅시다
cat file | wc -l
라인 수만 인쇄됩니다. 쉘은 파일 내용을 어디에 저장합니까? 예를 들어 찾기와 동일
find . -type f -exec grep -o 'hello' {} \; | wc -l
쉘은 어떻게 했나요?
답변1
따라서 귀하의 예에서는 다음과 같습니다.
cat file | wc -l
결과 출력은 파이프를 통해 스트림에 연결된 스트림 cat
으로 전달됩니다 .stdout
stdin
wc
실제 구현에서는 각 파이프가 특정 크기의 버퍼와 연결됩니다. 이 버퍼는 stdout
왼쪽 프로세스의 데이터 로 채워지고 stdin
오른쪽 프로세스에서 사용됩니다. 두 프로세스 모두 병렬로 실행되며 오른쪽 프로세스가 모든 데이터를 충분히 빠르게 소비하지 못하고 버퍼가 가득 차는 경우 왼쪽 프로세스를 차단하는 메커니즘이 있습니다.
자세한 내용은 다음을 참조하세요.여기.
답변2
완전한 기술적 답변은 없지만 제공한 예에서 쉘은 단순히 표준 출력 파일 설명자를 두 번째 명령의 표준 입력 파일 설명자에 연결합니다. 데이터는 한 프로세스에서 다른 프로세스로 전달될 때 데이터를 버퍼링하는 데 필요한 메모리를 제외하고 어디에도 저장되지 않습니다.