Frage Gibt es eine Paging-Version von `watch`?


Wie kann ich unter einer UNIX - Shell einen ähnlichen Effekt wie bei der watch Befehl, aber mit Paging, so dass ich in der Ausgabe blättern kann, wenn es mehr als einen Bildschirm aufnimmt?

Mit anderen Worten, ich möchte ein Programm, das ist watch Was less ist zu cat.

Nehmen wir als Beispiel an, ich wollte die Ausgabe von qstat, Ich könnte benutzen

watch qstat

um die Ausgabe von qstat zu sehen, aber dies kann nur den ersten Bildschirm zeigen.

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


22
2017-08-06 04:33


Ursprung


Dies gehört wahrscheinlich auf SuperUser oder vielleicht ServerFault.
Sie haben wahrscheinlich Recht, wie kann ich es bewegen? - David Dean
Drei Leute haben gewählt, um es so weit zu bewegen; Wenn zwei weitere Personen (oder ein Moderator) dafür stimmen, wird es automatisch geschehen. - Greg Hewgill
Warum nicht einfach ein größeres Fenster öffnen und mit dem Paging fortfahren? - Marcin
weil mein Bildschirm schon voll ist? Warum benutzen? less wenn du es einfach benutzen kannst cat und ein größeres Fenster? - David Dean


Antworten:


Anstatt den Befehl 'watch' zu ändern, verwenden Sie den Bildschirm!

Nehmen wir zum Beispiel an, dass Sie 300 Zeilen Höhe und 100 Zeichen Breite sehen und sich bewegen müssen. Nach dem Start Bildschirm, zwingen Sie die Größe so:

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

Starten Sie jetzt Ihren Watch-Befehl. Sie können dann verwenden C-a <ESC> um das Display zu blättern.

Leider wird das Display im Kopiermodus nicht aktualisiert. Wenn Sie jedoch einstellen möchten, welcher Abschnitt des Fensters gerade angezeigt wird, können Sie die Befehle Höhe / Breite am einfachsten ausführen, da Ihr Terminal standardmäßig die untere rechte Ecke des virtuellen Fensters anzeigt.


18
2017-08-12 15:31



das einzige Problem ist dann, wie man den Befehl ständig wiederholt, während man den Bildschirm zwischen jedem Durchlauf ausblendet - David Dean
Ups, ich wollte den Watch-Befehl im Bildschirm ausführen. Fest. - MikeyB
Yartls - noch ein Grund, Bildschirm zu lieben :) - warren
beachten Sie, dass C- ist aka ctrl- - henry


Sie können dies versuchen:

während vmstat; Schlaf 1; fertig Weniger

Ersetzen Sie Vmstat durch Qstat und passen Sie den Schlaf an Ihre Bedürfnisse an


5
2017-08-07 09:51



All dies macht immer wieder den Befehl in lessDies 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 beides gleichzeitig haben. Drücken Sie die Shift-Taste f, das ist die Großschreibung "F". - Spacen Jasset


Multitail: http://www.vanheusden.com/multitail/

Beispiel:

 vmstat 1 |multitail -j

Scrollen Sie zurück durch Drücken von 'b' und Seite / Pfeil hoch / runter.


4
2017-08-14 02:45





OK, ich habe ein wenig bei a watchless Funktion. Es ist ein bisschen grob, und es scheint noch nicht vollständig zu funktionieren, aber hier geht es:

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

Sie müssen manuell die R Geben Sie weniger ein, um das Display zu aktualisieren.

Es scheint zu funktionieren watchless date aber nicht für watchless qstat oder watchless pstree, die beide leer zeigen. Irgendwelche Ideen?


2
2017-08-06 05:22



Sie sollten eine zweite Datei verwenden, um die Ausgabe des nächsten Befehls zu schreiben und dann mv diese zweite Datei in die Datei gelesen von less wie mv ist atomar. Andernfalls less könnte denken, dass die Datei verschwunden ist, wenn eine Aktualisierung gleichzeitig mit der Datei angefordert wird "$@" > $out. Sie sollten auch einmal in die Ausgabedatei schreiben, bevor Sie die Schleife starten. - Aurélien Ooms


Ich sehe nicht, wie dies implementiert werden könnte, wenn sich die Zeileninhalte ändern, und watch würde alle 2 Sekunden auf die erste Zeile zurückgesetzt, auch 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 so zu vergrößern, dass die Zeilen, an denen Sie interessiert sind, immer im ersten Bildschirm angezeigt werden.

Beachten Sie, dass Sie die Befehle um die Pipe in einfache Anführungszeichen setzen müssen - andernfalls werden Sie die Ausgabe von watch, nicht die Ausgabe von qstat.


0
2017-08-11 18:06





Um Enkrs 'Antwort fortzusetzen,

schau 'qstat | Kopf -300 | Schwanz -15 '

Sie erhalten beliebige Seiten in die Ausgabe von qstat.


0
2017-08-11 18:28





Hier ist ein ziemlich primitives Skript, das für mehrere Befehle zu funktionieren scheint

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

Verwendet als solche:

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, ist er nicht so reibungslos, wie ich es gerne hätte. Da es sich um ein einfaches Skript handelt, unterstützt es natürlich nicht die Hervorhebung von diff (watch -d). Auch das Parsen von Eingabeargumenten kann besser durchgeführt werden.


0
2017-08-12 16:04





Wie wäre es nur mit: Schwanz -f


0
2017-08-17 13:36





Ich implementiere ein einfaches Python-Skript, um diese Anfrage zu erfüllen, genannt "Watchall"

hol es dir durch: pip install watchall

Ersetze die Uhr mit Watchall und genieße den scrollbaren Bildschirm. Jetzt unterstützt es nur -n und -d Flags.


0
2018-06-14 07:04





Du kannst es versuchen:

watch command > file

dann solltest du in deiner Datei die appendend-Ausgabe sehen (ich habe jetzt keine Linux-Box, um das zu testen)


-1
2017-08-06 04:40



Das wird nicht das tun, was Sie vorhaben, wirklich, es wird sich füllen file mit der gleichen Ausgabe immer und immer wieder. Es geht sicherlich nicht um die ursprüngliche Frage. - Greg Hewgill
dann weiß ich nicht :)
Ändern Sie das ">" zu ">>", damit es die Daten an die Datei anhängen? - Rory