2011-07-27 3 views
4

をどのように処理するか、シェルのパイプ、私は結果ページ付けするために以下を使用します。私はシェルコマンドの出力を制限する必要があるときはいつでも無限ループ

cat file_with_long_content | less

罰金とダンディに動作しますが、私は好奇心だが、ありますその後、私は

を実行

while true; do date; done

:以下、まだ出力がinf.shファイルに以下のスクリプトを持っ検討し、終わることがない場合であっても動作します

sh inf.sh | less

そして、それはそれは、そのパイプが結果をストリームではなく、コマンドが結果を出力する前に終了するのを待っていると言うことが正しいです、まだ再び結果をページ分割することができますか?

+2

は[unix.se] – Jacob

答えて

7

はい、sh inf.sh | lessを実行すると、2つのコマンドが並行して実行されます。最初のプロセスによってパイプに書き込まれたデータは、2番目のプロセスによって読み取られるまで(カーネルによって)バッファリングされます。バッファがいっぱいである場合(すなわち、第1のコマンドが第2のコマンドよりも速くパイプに書き込む場合)、次の書き込み動作は、さらなるスペースが利用可能になるまでブロックする。空のパイプから読み込むときにも同様の条件が発生します。パイプバッファが空であるにもかかわらず入力の端がまだ開いている場合、読み込みはより多くのデータをブロックします。

詳細については、pipe(7)マニュアルを参照してください。

1

正しいです。 パイプはストリームです。

lessツールの独自のバージョンをCコードのごく少数の行にコーディングすることができます。ファイルやパイプに関する短い研究など、時間をかけてください。あなた自身の質問などに答えて理解が浮かび上がるでしょう。:)

関連する問題