2011-07-27 129 views
4

每當我需要限制的shell命令的輸出,我用的少分頁結果:如何殼管處理無限循環

cat file_with_long_content | less

的正常工作和花花公子,但我很好奇的是,少仍然有效,即使輸出是永無止境的,請考慮在inf.sh文件下面的腳本:

while true; do date; done

然後我跑

sh inf.sh | less

,它仍然能夠再次分頁的結果,因此,它是正確的說,管流的結果,而不是等待命令輸出結果前完成?

+2

應在[unix.se] – Jacob

回答

7

是的,當您運行sh inf.sh | less時,兩個命令並行運行。第一個進程寫入管道的數據被緩衝(由內核),直到被第二個進程讀取。如果緩衝區已滿(即,如果第一個命令寫入管道的速度快於第二個命令的讀取速度),則下一個寫入操作將阻塞,直到有更多空間可用。從空管道讀取時會發生類似的情況:如果管道緩衝區爲空,但輸入端仍處於打開狀態,讀取將阻止更多數據。

有關詳細信息,請參閱pipe(7)手冊。

1

這是正確的。 管道是流

您可以在幾行C代碼中編寫自己的less工具版本。花些時間做到這一點,包括對文件和管道的簡短研究,並且您將瞭解回答自己的問題和更多:)。