yes가 버퍼를 채우지 않는 이유는 무엇입니까?

yes가 버퍼를 채우지 않는 이유는 무엇입니까?

내가 다음과 같은 일을 한다고 가정해 보세요 yes | apt-get install foo. 나는 그것이 stdout에 yes여러 개의 's'를 논스톱으로 인쇄한다는 것을 알고 있습니다. y\n하지만 apt-get그 중 일부만 처리할 수 있습니다. yes버퍼가 채워지지 않는 이유는 무엇입니까 ? 실제로 y\n에서 요청할 때만 a를 인쇄합니까 apt-get?

답변1

NB 이것은 완전한 답변은 아니지만 주로 아래에 좋은 의견이 있기 때문에 여기에 보관하고 있습니다.

y\n실제로 에서 요청할 때만 a를 인쇄합니까 apt-get?

예. 파이프의 오른쪽은 동시에 작동하며 왼쪽은 출력을 생성합니다. 또한 왼쪽은 필요하지 않은 한 "완료" 상태로 이동하지 않습니다. 예를 들어, 다음은 종료될 때까지 터미널에 쓰는 무한 루프를 생성합니다.

while true; do echo foo; done

그러나 다음은 10줄을 인쇄한 다음 정상적으로 종료됩니다.

while true; do echo foo; done | head

명령이 완료 되면 head파이프의 왼쪽은 더 이상 작동할 필요가 없으며 "무한" 루프도 더 이상 작동하지 않습니다.

관련 정보