Gibt es eine Paging-Version von "watch"?


24

Wie kann ich unter einer UNIX-Shell einen ähnlichen Effekt wie beim watchBefehl erzielen , aber mit Paging, damit ich in der Ausgabe einen Bildlauf durchführen kann, wenn sie mehr als einen Bildschirm einnimmt?

Mit anderen Worten, ich möchte ein Programm, das dem entspricht, watchwas lessdem entspricht cat.

Nehmen wir zum Beispiel an, ich wollte die Ausgabe von sehen qstat, die ich verwenden könnte

watch qstat

um die ausgabe von qstat zu sehen, dies kann aber nur der erste screenful anzeigen.

Mit einer Paging-Version von könnte watchich mich in der Ausgabe bewegen, da sie von immer noch ständig aktualisiert wird watch. Gibt es im Moment eine Möglichkeit, dies mit vorhandenen Dienstprogrammen zu tun?


Dies gehört wahrscheinlich auf SuperUser oder vielleicht ServerFault.

Sie haben wahrscheinlich Recht, wie kann ich es bewegen?
David Dean

Bisher haben drei Personen dafür gestimmt, es zu verschieben. Wenn zwei weitere Personen (oder ein Moderator) dafür stimmen, wird dies automatisch geschehen.
Greg Hewgill

Warum nicht einfach ein größeres Fenster öffnen und mit dem Blättern ganz weggehen?
Marcin

1
ist denn mein bildschirm schon voll? Warum verwenden, lesswenn Sie nur catein größeres Fenster verwenden können?
David Dean

Antworten:


18

Verwenden Sie screen, anstatt den Befehl 'watch' zu ändern!

Nehmen wir zum Beispiel an, Sie müssen 300 Zeilen Höhe und 100 Zeichen Breite sehen und sich darin bewegen können. Erzwingen Sie nach dem Start des Bildschirms die Größe folgendermaßen:

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

Starten Sie jetzt Ihren Überwachungsbefehl. Sie können dann verwenden C-a <ESC>, um im Display zu blättern.

Leider wird die Anzeige im Kopiermodus nicht aktualisiert. Wenn Sie jedoch den angezeigten Fensterbereich anpassen möchten, können Sie die Befehle für Höhe und Breite am einfachsten erneut ausführen, da Ihr Terminal standardmäßig rechts unten im virtuellen Fenster angezeigt wird.


Das einzige Problem ist dann, wie Sie den Befehl fortlaufend wiederholen, während Sie den Bildschirm zwischen den einzelnen
David Dean

Hoppla, ich wollte den Befehl watch auf dem Bildschirm ausführen. Fest.
MikeyB

Yartls - ein weiterer Grund, Bildschirm zu lieben :)
Warren

Beachten Sie, dass C-akactrl-
Henry

5

Sie können dies versuchen:

während vmstat; schlafe 1; fertig | Weniger

Ersetzen Sie vmstat durch qstat und passen Sie den Ruhezustand an Ihre Bedürfnisse an


Alles less, was Sie tun müssen, ist, den Befehl in zu wiederholen. Das bedeutet, dass Sie weiter scrollen müssen, um die neueste Ausgabe zu sehen.
David Dean

Ja, aber Sie können zurückblättern. Sie können nicht beide gleichzeitig haben. Drücken Sie die Umschalttaste f, d. H. Großbuchstabe 'F', funktioniert wie Schwanz.
Spacen Jasset


2

OK, ich hatte ein bisschen Zeit für eine watchlessVeranstaltung. Es ist ein bisschen rau, und es scheint noch nicht ganz zu funktionieren, aber hier ist:

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

Sie müssen den RSchlüssel in weniger manuell verwenden , damit die Anzeige aktualisiert wird.

Es scheint zu funktionieren, watchless dateaber nicht für watchless qstatoder watchless pstree, die beide leer sind. Irgendwelche Ideen?


Sie sollten eine zweite Datei verwenden, um die Ausgabe des nächsten Befehlslaufs und dann mvdiese zweite Datei in die Datei zu schreiben, die von lessas mvis atomic gelesen wird. Andernfalls lesskönnte man meinen, dass die Datei verschwunden ist, wenn gleichzeitig mit dem Schreiben der Datei eine Aktualisierung angefordert wird "$@" > $out. Sie sollten auch einmal in die Ausgabedatei schreiben, bevor Sie die Schleife starten.
Aurélien Ooms

0

Ich verstehe nicht, wie dies implementiert werden könnte, wenn sich der Zeileninhalt ändert, und watchwürde alle 2 Sekunden auf die erste Zeile zurückgesetzt, selbst wenn Sie nach unten scrollen könnten.

Einige Problemumgehungen sind:

watch 'qstat | tail -n40' um die Ausgabe von qstat ab der 40. Zeile von unten anzuzeigen

watch 'qstat | grep jsmith' Um die Ausgabe zu prüfen, befinden sich die Zeilen, die Sie interessieren, immer im ersten Bildschirm.

Beachten Sie, dass Sie die Befehle in einfachen Anführungszeichen um die Pipe setzen müssen - andernfalls leiten Sie die Ausgabe von watchund nicht die Ausgabe von qstat.


0

Um mit der Antwort von enkrs fortzufahren,

beobachte 'qstat | kopf -300 | Schwanz -15 '

bringt Ihnen beliebige Seiten in die Ausgabe von qstat.


0

Hier ist ein ziemlich grobes Skript, das für mehrere Befehle zu funktionieren scheint, die ich darauf angewendet habe

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

Als solches verwendet:

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

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

Da der Übergang zwischen den Aktualisierungen eher pedantisch ist, verläuft er nicht so reibungslos, wie ich es mir vorgestellt habe. Als einfaches Skript unterstützt es natürlich kein Highlight von diff (watch -d). Außerdem kann das Parsen von Eingabeargumenten verbessert werden.



0

Ich implementiere ein einfaches Python-Skript namens "watchall", um diese Anfrage zu erfüllen.

Hol es dir : pip install watchall

Ersetzen Sie die Uhr durch eine andere und genießen Sie den scrollbaren Bildschirm. jetzt werden nur die Flags -n und -d unterstützt.


-1

Du kannst es versuchen:

watch command > file

dann solltest du in deiner Datei die angehängte Ausgabe sehen (ich habe jetzt keine Linux Box um das zu testen)


1
Das wird nicht das tun, was Sie beabsichtigen, sondern es wird fileimmer und immer wieder mit der gleichen Ausgabe gefüllt . Die ursprüngliche Frage wird hier sicherlich nicht angesprochen.
Greg Hewgill

dann weiß ich nicht :)

1
Ändern Sie ">" in ">>", damit die Daten an die Datei angehängt werden?
Rory
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.