パイプラインの他のプロセスを停止せずに「less」フォローモードを終了する方法はありますか?

パイプラインの他のプロセスを停止せずに「less」フォローモードを終了する方法はありますか?

何度も私はすべての機能(スクロール、検索、ショートカット...)を含むバッファに出力を保存する必要があることに気づき、慣れましたless

しかし、私が使用するほとんどのコマンドは、常に出力を生成します。連続出力を使用すると、less実際に期待どおりに機能しません。

たとえば、

while sleep 0.5
do
    echo "$(cat /dev/urandom | tr -cd 'a-zA-Z0-9' | head -c 100)"
done | less -R

これにより、less出力が最大ターミナルの高さに達するまでキャプチャされ、この時点ですべてが停止し(まだデータを受け入れることができるように)、移動キーを使用して上下にスクロールできます。これが望む効果です。

奇妙なことは、生成されたコンテンツ(通常は使用)に追いつくとロックがPgDn発生し、新しいデータを追跡して元のコマンドを終了して停止するまで移動キーを使用できないことです。これは望ましい効果ではありません。less^C

less私が間違って使っているのではないでしょうか?私の願いを聞くことができる他のプログラムはありますか?このモードでは「ロック解除」は可能ですか?

ありがとうございます!

ベストアンサー1

^Cを使わずに「less」フォローモードを終了する方法はありますか?

はい、スタートバージョン569以降、CTRL+を使用してフォローモードを終了できます。Xこれはパイプラインの他のプロセスを停止しません。

以前のバージョンのless(+のみサポート)では、+を押したときに送信されたSIGINT信号がパイプ内の他のプロセスに影響を与えずに実行を継続するようにCTRL配置することが可能でした。Cこれは、次のいずれかを実行することで達成できます。CTRLC

  • これらを使用してこれらのプロセスを別のプロセスグループに移動して、SIGINTがパイプラインの他のプロセスに到達するのを防ぎます。設定値便利:

(setsid seq 10000000) | less +F

  • 扱う(捕獲)パイプの他のプロセスに渡されないようにSIGINT:

(trap '' INT; seq 10000000) | less +F

  • プロセス置換を使用してください(Bash、Zsh、Kshでは実装されているがDashなどでは実装されていない非POSIX機能)。

less -f +F <(seq 10000000)

(seq 10000000 &) | less +F

プロセスグループと信号処理に対する上記コマンドの効果を観察するには、ps -O ppid,pgrp,sid,ignored --forest -C bash,less,seq別の端末でコマンドを使用することをお勧めします。

おすすめ記事