每當我需要限制的shell命令的輸出,我用的少分頁結果:如何殼管處理無限循環
cat file_with_long_content | less
的正常工作和花花公子,但我很好奇的是,少仍然有效,即使輸出是永無止境的,請考慮在inf.sh
文件下面的腳本:
while true; do date; done
然後我跑
sh inf.sh | less
,它仍然能夠再次分頁的結果,因此,它是正確的說,管流的結果,而不是等待命令輸出結果前完成?
每當我需要限制的shell命令的輸出,我用的少分頁結果:如何殼管處理無限循環
cat file_with_long_content | less
的正常工作和花花公子,但我很好奇的是,少仍然有效,即使輸出是永無止境的,請考慮在inf.sh
文件下面的腳本:
while true; do date; done
然後我跑
sh inf.sh | less
,它仍然能夠再次分頁的結果,因此,它是正確的說,管流的結果,而不是等待命令輸出結果前完成?
是的,當您運行sh inf.sh | less
時,兩個命令並行運行。第一個進程寫入管道的數據被緩衝(由內核),直到被第二個進程讀取。如果緩衝區已滿(即,如果第一個命令寫入管道的速度快於第二個命令的讀取速度),則下一個寫入操作將阻塞,直到有更多空間可用。從空管道讀取時會發生類似的情況:如果管道緩衝區爲空,但輸入端仍處於打開狀態,讀取將阻止更多數據。
有關詳細信息,請參閱pipe(7)手冊。
這是正確的。 管道是流。
您可以在幾行C代碼中編寫自己的less
工具版本。花些時間做到這一點,包括對文件和管道的簡短研究,並且您將瞭解回答自己的問題和更多:)。
還有一篇由亞歷山大桑德勒撰寫的名爲「如何減少處理其輸入」的內容豐富的文章!
應在[unix.se] – Jacob