Apakah ada versi paging `watch`?

24

Di bawah shell UNIX, bagaimana saya bisa mendapatkan efek yang mirip dengan watchperintah, tetapi dengan paging sehingga saya bisa melihat-lihat hasilnya jika membutuhkan lebih dari satu layar?

Dengan kata lain, saya ingin program yang untuk watchapa lessadalah untuk cat.

Sebagai contoh, katakanlah saya ingin menonton output dari qstat, saya bisa menggunakan

watch qstat

untuk menonton output dari qstat, tetapi ini hanya dapat menunjukkan layar penuh pertama.

Dengan versi paging watch, saya akan dapat bergerak dalam output karena masih terus diperbarui oleh watch. Apakah ada cara untuk melakukan ini saat ini dengan utilitas yang ada?

David Dean
sumber
Ini mungkin milik SuperUser atau ServerFault.
Anda mungkin benar, bagaimana saya bisa memindahkannya?
David Dean
Tiga orang telah memilih untuk memindahkannya sejauh ini; jika dua orang lagi (atau moderator) memilih untuk memindahkannya, maka itu akan terjadi secara otomatis.
Greg Hewgill
Mengapa tidak membuka jendela yang lebih besar dan pergi dengan paging sama sekali?
Marcin
1
karena layar saya sudah penuh? mengapa menggunakan lesssaat Anda hanya dapat menggunakan catdan jendela yang lebih besar?
David Dean

Jawaban:

18

Daripada mengubah perintah 'menonton', gunakan layar!

Sebagai contoh, katakanlah Anda harus dapat melihat 300 garis ketinggian dan 100 karakter lebar dan bergerak di sekitar itu. Setelah memulai layar, paksa ukuran demikian:

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

Sekarang mulai perintah arloji Anda. Anda kemudian dapat menggunakan C-a <ESC>untuk halaman di sekitar tampilan.

Sayangnya, tampilan tidak menyegarkan saat dalam mode salin. Tetapi jika Anda ingin menyesuaikan bagian mana dari jendela yang sedang Anda lihat, cara termudah adalah dengan menjalankan kembali perintah tinggi / lebar karena secara default terminal Anda menunjukkan bagian kanan bawah dari jendela virtual.

MikeyB
sumber
satu-satunya masalah kemudian adalah bagaimana untuk terus mengulang perintah, sementara pengosongan layar antara masing-masing go
David Dean
Ups, maksud saya jalankan perintah arloji di dalam layar. Tetap.
MikeyB
yartls - alasan lain untuk mencintai layar :)
warren
perhatikan itu C-aliasctrl-
henry
5

Anda dapat mencoba ini:

sementara vmstat; tidurlah 1; selesai | kurang

ganti vmstat dengan qstat dan sesuaikan tidur dengan kebutuhan Anda

Spacen Jasset
sumber
semua ini dilakukan adalah terus mengulangi perintah ke dalam less, yang berarti bahwa Anda harus terus bergulir untuk melihat keluaran terbaru.
David Dean
Ya, tetapi Anda dapat menggulir ke belakang. Anda tidak dapat memiliki keduanya sekaligus. Menekan shift f, yaitu modal 'F' akan bekerja seperti ekor.
Spacen Jasset
2

OK, saya sudah sedikit pergi ke suatu watchlessfungsi. Agak kasar, dan sepertinya belum berfungsi sepenuhnya, tapi begini:

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

Anda harus menggunakan Rkunci secara manual kurang untuk mendapatkan tampilan untuk memperbarui.

Tampaknya berfungsi untuk watchless datetetapi tidak untuk watchless qstatatau watchless pstree, yang keduanya menunjukkan kosong. Ada ide?

David Dean
sumber
Anda harus menggunakan file kedua untuk menulis output dari menjalankan perintah berikutnya dan kemudian mvfile kedua ini untuk file dibaca oleh lessseperti mvatom. Kalau tidak, lessbisa berpikir bahwa file telah hilang jika refresh diminta pada saat yang sama dengan file sedang ditulis "$@" > $out. Anda juga harus menulis ke file output satu kali sebelum memulai loop.
Aurélien Ooms
0

Saya tidak melihat bagaimana ini bisa diterapkan ketika konten baris berubah, dan watchakan mengatur ulang kembali ke baris pertama setiap 2 detik bahkan jika Anda dapat menggulir ke bawah.

Beberapa solusi adalah:

watch 'qstat | tail -n40' untuk menampilkan output qstat mulai dari garis ke-40 dari bawah

watch 'qstat | grep jsmith' untuk menangkap output sehingga garis yang Anda minati selalu di layar pertama.

Perhatikan bahwa Anda perlu menempatkan perintah di sekitar pipa dalam tanda kutip tunggal - jika tidak, Anda akan memipipkan output watch, bukan output qstat.

enkrs
sumber
0

Untuk melanjutkan jawaban enkrs,

tonton 'qstat | kepala -300 | ekor -15 '

akan membuat Anda halaman sewenang-wenang ke output qstat.


sumber
0

Berikut ini skrip agak kasar yang tampaknya berfungsi untuk beberapa perintah yang saya berikan

#!/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

Digunakan seperti itu:

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

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

Menjadi agak bertele-tele, transisi antara penyegaran tidak semulus yang saya inginkan. Tentu saja, menjadi skrip sederhana tidak mendukung highlight dari diff (watch -d). Selain itu, penguraian argumen input dapat dilakukan dengan lebih baik.

Shawn Chin
sumber
0

Bagaimana dengan: tail -f

geeklin
sumber
0

Saya menerapkan skrip python sederhana untuk memenuhi permintaan ini, bernama "watchall"

dapatkan dengan: pip install watchall

ganti arloji dengan arloji dan nikmati layar yang dapat digulir. sekarang hanya mendukung flag -n dan -d.

Mohammad Fatemipour
sumber
-1

Anda dapat mencoba:

watch command > file

maka dalam file Anda, Anda akan melihat output appendend (Saya tidak punya kotak linux rigth sekarang untuk menguji ini)


sumber
1
Itu tidak akan melakukan apa yang Anda inginkan, sungguh, itu hanya akan mengisi filedengan output yang sama berulang-ulang. Ini tentu tidak menjawab pertanyaan awal.
Greg Hewgill
maka saya tidak tahu :)
1
Ubah ">" menjadi ">>" untuk membuatnya menambahkan data ke file?
Rory