web-dev-qa-db-ja.com

lessを使用してパイプを追跡しますか?

(ファイルと同様に)パイプで連結された入力を(Fを押すことで)より少なく追跡できますか?書き込み中のファイルの場合、コマンド

less <file>

fキーを押すと、ファイルを追跡します。

しかし、次のように、出力を直接lessにパイプするコマンドがある場合

command | less

fを押しても何も起こりません。

だから、ファイルのようにパイプを追跡できないように見えますか?または多分それはSTDERRへの書き込みコマンドにも関係していますか?私が達成しようとしている効果は、常にコマンドの最新の出力を表示することです:PageDownを押したままのように!

G(最後に移動)に関連する注釈があります。lessに直接パイプすると、機能しません。

28
haelix

押す F または Glessに入力EOFへの到達を試みさせます。入力がパイプの場合、lessは、パイプが反対側で閉じられる(「何もしない」)までハングします。

これは、コマンド出力をバックグラウンドで一時ファイルに保存し、lessの入力として使用することで回避できます。

command > /tmp/x &
less +F /tmp/x; kill %; rm /tmp/x

lessのみでこれを行うオプションはありません。しかし、私はそれが役に立つと認めます。

24
mik

(ファイルと同様に)パイプで連結された入力を(Fを押すことで)より少なく追跡できますか?

はい、バージョン474以降です。ただし、この機能には現在1つの問題が残っているため、どのバージョンのリリースノートにもまだ記載されていません。以下はlessのメンテナからのコメントです– Mark Nudelman:

パイプのFコマンドに関しては、less-474でも修正されています。 EOFにシークする代わりに、Fコマンドはバッファリングされた入力の終わりにシークし、そこから読み取りを開始します。ただし、CTRL-Cを押してFコマンドを停止すると、出力を生成するプロセスが強制終了されるため、実際には使用できません。それを修正する方法がわかりません。

この問題が修正されるまでは、シェル機能を使用して回避できます。詳細については、私の answer to パイプの他のプロセスを停止せずに「less」フォローモードを終了する方法はありますか?質問を参照してください。

参考までに、パイプが機能しないFの問題は、既知の バグ のリストに参照番号300があり、タイトルはFコマンドはパイプ入力では機能しません。


G(最後に移動)に関連する注釈があります。lessに直接パイプすると、機能しません。

バージョン466以降で機能します。このバージョンの リリースノート からの引用:

新しいコマンドESC-Gは、パイプで現在バッファリングされているデータの最後に移動します

6
Piotr Dobrogost

Lessのmanページから

[Keyboard] COMMANDS [...]

   F      Scroll  forward, and keep trying to read when the end of file is reached.  Normally this command would be used when already
          at the end of the file.  It is a way to monitor the tail of a file which is growing while it is being viewed.  (The  behav‐
          ior is similar to the "tail -f" command.)

これでうまくいくはずですが、実際に私にとってはうまくいきます。

2
artistoex