Shell是否
是否echo -n |...
向管道發送 EOF?
是否
echo -n | ...
向管道發送 EOF?IE,echo -n | sth
會
sth
在其標準輸入上收到 EOF 嗎?
文件或流中沒有表示為數據的 EOF。它只是與文件描述符相關的狀態。
當回顯終止時(幾乎立即終止),管道的寫入端關閉。
下一次
sth
讀取(假設它已經讀取了之前寫入文件的所有數據)管道狀態更改為 EOF,並且發出的讀取sth
返回 EOF 條件。該過程可以繼續進行所需的任何處理,只是無法從管道中讀取任何內容。
是的。當寫入管道的程序關閉寫入端時,從管道讀取的程序會在管道上看到文件結尾。更準確地說,文件結束事件發生在管道上打開的最後一個文件描述符關閉時。關閉文件描述符的方法包括顯式關閉和程序退出。
這裡只有一個程序寫入管道並執行
echo -n
,這取決於 shell 要麼寫入-n
和換行符,要麼什麼都不寫。當該程序完成寫入並退出時,管道的寫入端關閉,因此sth
在管道上看到 EOF。(也有可能 shell 在沒有分叉的情況下執行管道的左側,在這種情況下,shell 在完成寫入時會顯式關閉管道:這種優化對管道的右側沒有任何影響.)