多くの場合、すべての機能(スクロール、検索、ショートカットなど)を備えたバッファーに出力を入れる必要があり、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
を間違って使用していますか?私が望むことをする他のプログラムはありますか?このモードから「ロック解除」することは可能ですか?
ありがとうございました!
追加されているファイルを見るときは問題なく機能しますが、入力がパイプからのものであるときは機能しません(F
コマンドを使用します-control-Cは正常に機能します)。
lessを使用してパイプをたどる? の説明を参照してください-これはless
の既知のバグ/欠点です。
^ Cなしで「less」フォローモードを終了する方法はありますか?
いいえ、ただし、次のように配置できます。 CTRL-C パイプ内の他のプロセスに影響を与えないため、それらを実行できます。
ソリューションA–シェルの モニターモード を使用して、独自のプロセスグループへの移動を減らします(set -m
)
while sleep 0.5
do
echo "$(cat /dev/urandom | tr -cd 'a-zA-Z0-9' | head -c 100)"
done | (set -m; less -R)
アイデアはPSkocikから来て、彼の answer で与えられました。
ソリューションB– SIGINTの処理(CTRL-C)パイプ内の他のプロセスに配信されないようにする
(trap '' SIGINT; exec bash -c 'while sleep 0.5
do
echo "$(cat /dev/urandom | tr -cd 'a-zA-Z0-9' | head -c 100)"
done') | less -R
#bash IRCチャネルでgeirhaによって与えられた解。