echo -n | ...
EOF를 파이프로 보내시겠습니까 ? 즉,
echo -n | sth
sth
표준 입력에서 EOF를 수신 합니까 ?
답변1
파일이나 스트림에 데이터로 표시되는 EOF가 없습니다. 이는 파일 설명자와 관련된 상태일 뿐입니다.
에코가 종료되면(거의 즉시) 파이프의 쓰기 끝이 닫힙니다.
다음 읽기 시 sth
(이전에 파일에 기록된 모든 데이터를 읽었다고 가정) 파이프 상태는 EOF로 변경되고 실행된 읽기는 sth
EOF 조건을 반환합니다. 프로세스는 원하는 대로 처리를 계속할 수 있지만 파이프에서 더 이상 읽을 수는 없습니다.
답변2
예. 파이프에 쓰는 프로그램이 쓰기 쪽을 닫으면 파이프에서 읽는 프로그램은 파이프에서 파일의 끝을 봅니다. 보다 정확하게는 파이프에서 열린 마지막 파일 설명자가 닫힐 때 파일 끝 이벤트가 발생합니다. 파일 설명자를 닫는 방법에는 명시적 닫기 및 프로세스 종료가 포함됩니다.
여기서는 하나의 프로세스만 파이프에 쓰고 실행합니다 echo -n
. 쉘에 따라 쓰고 -n
래핑하거나 아무것도 쓰지 않습니다. 프로세스가 쓰기를 마치고 종료되면 파이프의 쓰기 끝이 닫히므로 sth
파이프에 EOF가 표시됩니다. (쉘이 분기 없이 파이프의 왼쪽을 실행하는 것도 가능합니다. 이 경우 쉘은 쓰기를 마친 후 명시적으로 파이프를 닫습니다. 이 최적화는 파이프의 오른쪽에 영향을 미치지 않습니다.)