`dockerログfoo | less`は検索またはスクロールできませんが、`dockerlogs foo 2>&1 less`

`dockerログfoo | less`は検索またはスクロールできませんが、`dockerlogs foo 2>&1 less`

読みやすいテキストを取得するには、次のいずれかを使用します。ただし、stderrリダイレクトを介してのみスクロールするか、/somepatternと入力して一致するものを取得できます。

これがないと、検索時に「検索する内容がありません(RETURNを押す)」と列〜が表示されます。

与えられた場合、stderrとstdoutは同じではありませんが、なぜlessでジョブを開始するまでlessが同じであるとマークするのですか?

これはおそらく私が理解していない奇妙なマルチウィンドウvimです。アイデア?

答え1

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

標準エラーでテキストを印刷すると、実行時と両方がsomecommand端末に印刷されます。 stderrのコマンド出力はリダイレクトされないため、端末に直接出力されません。まず、lessが初期化されると出力がスクロールしてプロンプト行を表示し、完了するとlessは入力が完了したことを通知します(パイプが閉じたため)。次のことを試すこともできます。実行somecommand | lesssomecommandlesslesssomecommandsomecommand

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

またsomecommand、lessが準備される前または後に出力を生成するスリープ時間を変更し、パイプが閉じたときに何が起こるかを確認してください。

関連情報