UNIXシェルでは、どのようにしてwatch
コマンドと同様の効果を得ることができますが、ページングを使用して、複数の画面を占める場合に出力内をスクロールできるようにしますか?
言い換えれば、watch
とはless
がcat
になるプログラムです。
例として、 qstat
の出力を確認したいとします。
watch qstat
qstatの出力を監視しますが、これは最初の画面全体しか表示できません。
watch
のページングバージョンを使用すると、watch
によって継続的に更新されるため、出力内を移動できます。現在、既存のユーティリティでこれを行う方法はありますか?
「watch」コマンドを変更するのではなく、screenを使用してください!
たとえば、高さ300行、幅100文字を表示し、移動できるようにする必要があるとします。画面を開始した後、次のようにサイズを強制します。
C-a :height -w 300
C-a :width -w 100
次に、watchコマンドを開始します。その後、C-a <ESC>
でページをめくります。
残念ながら、コピーモードでは表示が更新されません。ただし、表示しているウィンドウのセクションを調整する場合、デフォルトでは端末に仮想ウィンドウの右下が表示されるため、height/widthコマンドを再実行するのが最も簡単な方法です。
あなたはこれを試すことができます:
一方、vmstat;寝る1;完了|もっと少なく
vmstatをqstatに置き換え、必要に応じてスリープを調整する
マルチテール: http://www.vanheusden.com/multitail/
例:
vmstat 1 |multitail -j
'b'を押してページ/矢印の上/下にスクロールして戻ります。
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
、どちらも空白を示します。何か案は?
これは私が投げたいくつかのコマンドで機能するように見えるかなり粗雑なスクリプトです
#!/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)はサポートされていません。また、入力引数の解析をより適切に行うことができます。
この要求を満たすために、単純なpythonスクリプトを実装し、「watchall」という名前を付けます
それを入手する:pip install watchall
時計をwatchallに交換し、スクロール可能な画面をお楽しみください。現在は-nフラグと-dフラグのみをサポートしています。
行の内容が変化したときにこれがどのように実装されるかはわかりません。また、スクロールダウンしても、2秒ごとにwatch
が最初の行にリセットされます。
いくつかの回避策は次のとおりです。
watch 'qstat | tail -n40'
下から40行目からqstatの出力を表示します
watch 'qstat | grep jsmith'
を使用して出力をgrepし、関心のある行が常に最初の画面に表示されるようにします。
パイプを囲むコマンドは一重引用符で囲む必要があることに注意してください。そうしないと、watch
の出力ではなく、qstat
の出力がパイプ処理されます。
Enkrsの答えを続けるには、
qstatを見る|ヘッド-300 |テール-15 '
qstatの出力に任意のページが表示されます。
ちょうどどうですか:tail -f