web-dev-qa-db-ja.com

`watch`のページングバージョンはありますか?

UNIXシェルでは、どのようにしてwatchコマンドと同様の効果を得ることができますが、ページングを使用して、複数の画面を占める場合に出力内をスクロールできるようにしますか?

言い換えれば、watchとはlesscatになるプログラムです。

例として、 qstat の出力を確認したいとします。

watch qstat

qstatの出力を監視しますが、これは最初の画面全体しか表示できません。

watchのページングバージョンを使用すると、watchによって継続的に更新されるため、出力内を移動できます。現在、既存のユーティリティでこれを行う方法はありますか?

25
David Dean

「watch」コマンドを変更するのではなく、screenを使用してください!

たとえば、高さ300行、幅100文字を表示し、移動できるようにする必要があるとします。画面を開始した後、次のようにサイズを強制します。

C-a :height -w 300
C-a :width -w 100

次に、watchコマンドを開始します。その後、C-a <ESC>でページをめくります。

残念ながら、コピーモードでは表示が更新されません。ただし、表示しているウィンドウのセクションを調整する場合、デフォルトでは端末に仮想ウィンドウの右下が表示されるため、height/widthコマンドを再実行するのが最も簡単な方法です。

18
MikeyB

あなたはこれを試すことができます:

一方、vmstat;寝る1;完了|もっと少なく

vmstatをqstatに置き換え、必要に応じてスリープを調整する

6
Spacen Jasset

マルチテール: http://www.vanheusden.com/multitail/

例:

 vmstat 1 |multitail -j

'b'を押してページ/矢印の上/下にスクロールして戻ります。

4
Lester Cheung

OK、watchless関数を少し試してみました。少しラフで、まだ完全には機能していないようですが、次のようになります。

#!/bin/bash -u
out=$(mktemp)
(while [ 1 ]; do
    "$@" > $out;
    sleep 2;
done) &
less $out
kill $!

表示を更新するには、手動でlessでRキーを使用する必要があります。

watchless dateですが、watchless qstatまたはwatchless pstree、どちらも空白を示します。何か案は?

2
David Dean

これは私が投げたいくつかのコマンドで機能するように見えるかなり粗雑なスクリプトです

#!/bin/bash
# ---- mywatch.sh ----

if [ $# -lt 1 && $# -gt 2 ]; then
    echo "Usage: $0 <command> <delay>" 
    exit 1
fi

CMD=$1
if [ $# -eq 2 ]; then
  DELAY=$2
else
  DELAY=2 # default
fi

while : ; do
  ( (echo -e "Every ${DELAY}s: $CMD\n"; $CMD) | less )&
  PID=$!
  sleep $DELAY
  kill -9 $PID &> /dev/null
  clear
done

そのまま使用:

alias mywatch="~/bin/mywatch.sh"

mywatch vmstat
mywatch "ps aux" # commands in options need to be quoted
mywaych pstree 10 # change delays

かなり知識が豊富なので、リフレッシュ間の移行は、私が望むほどスムーズではありません。当然、単純なスクリプトであるため、diffの強調表示(watch -d)はサポートされていません。また、入力引数の解析をより適切に行うことができます。

0
Shawn Chin

この要求を満たすために、単純なpythonスクリプトを実装し、「watchall」という名前を付けます

それを入手する:pip install watchall

時計をwatchallに交換し、スクロール可能な画面をお楽しみください。現在は-nフラグと-dフラグのみをサポートしています。

0

行の内容が変化したときにこれがどのように実装されるかはわかりません。また、スクロールダウンしても、2秒ごとにwatchが最初の行にリセットされます。

いくつかの回避策は次のとおりです。

watch 'qstat | tail -n40'下から40行目からqstatの出力を表示します

watch 'qstat | grep jsmith'を使用して出力をgrepし、関心のある行が常に最初の画面に表示されるようにします。

パイプを囲むコマンドは一重引用符で囲む必要があることに注意してください。そうしないと、watchの出力ではなく、qstatの出力がパイプ処理されます。

0
enkrs

Enkrsの答えを続けるには、

qstatを見る|ヘッド-300 |テール-15 '

qstatの出力に任意のページが表示されます。

0
anon

ちょうどどうですか:tail -f

0
geeklin