web-dev-qa-db-ja.com

`ドッカーはfooを記録します| less`は検索もスクロールもできませんが、 `docker logs foo 2>&1 | less`は

どちらかを使用すると、読みやすいテキストが得られます。しかし、stderrリダイレクトでのみ、1つのスクロールまたは/ somepatternと入力して一致を取得できます。

検索しないと、「検索するものはありません(RETURNを押す)」と〜の列が表示されます。

与えられた、stderrとstdoutは同じではありませんが、なぜlessで何かを始めるまで、lessがそれらを同じように表示しないのですか?

これは多分私が理解していない奇妙なマルチウィンドウvimのことです。考え?

10
MagicWindow
+--------------------+        +------+       +----------+
|             stdout |·······→| less |——————→|          |
| somecommand        |        +------+       | terminal |
|             stderr |——————————————————————→|          |
+--------------------+                       +----------+

somecommandがテキストを標準エラーのみに出力する場合、somecommand | lessを実行すると、somecommandlessの両方がターミナルに表示されます。 stderrでのコマンドの出力はlessではなく、リダイレクトされないため、ターミナルに直接出力されます。最初にsomecommandの出力がスクロールし、lessが初期化してプロンプトラインを表示します。次に、somecommandが終了すると、入力が完了したことが通知されます(パイプが閉じているため)。あなたは少し実験したいかもしれません:実行

{ sleep 1; somecommand; sleep 1; } | { sleep 0; less; }

そして、スリープ時間のバリエーションにより、lessの準備が完了する前または後にsomecommandが出力を生成し、パイプが閉じているときに何が起こるかを確認します。