GNU Watch ohne Löschen vorheriger Ausgaben

GNU Watch ohne Löschen vorheriger Ausgaben

Gnuwatchist ein sehr nützliches Tool zum Überprüfen einer Programmausgabe: Es führt das Programm aus und zeigt die Ausgabe alle 2 Sekunden im Vollbildmodus an.

Manchmal möchte ich die vorherige Ausgabe nicht löschen, sondern zeilenweise mit Zeitstempel drucken. Dafür verwende ich Bash-Skripte wie:

while true; 
    do echo -n "`date`   "; 
    ssh ubuntu@server -o ConnectTimeout=1 "uptime" ; 
    sleep 1; 
done

Gibt es einwatch-ähnliches Tool, das einen Befehl ausführen und seine Ausgabe mit einem Zeitstempel in einer Zeile anzeigen kann, ohne die vorherige Ausgabe zu löschen?

Antwort1

Ich würde sagen, Sie haben es in einfachen Schleifen gefunden, aber Sie könnten von hier aus eine Reihe von Dingen tun:

Schreiben Sie eine Funktion, die das für Sie erledigt

function uberwatch {
    # call: uberwatch <interval> <command>
    while true; do
        "${@:2}";
        sleep $1;
    done
}

Sie könnten das irgendwo in Ihrer Nähe unterbringen ~/.bashrc.

Protokollieren Sie die Ausgabe in einer Datei, aber sehen Sie sie weiterhin mitwatch

watch "command | tee -a watchlog.log"

Sie sehen zwar immer noch nur den letzten Durchlauf, können aber bei Bedarf in einem historischen Protokoll stöbern.

Antwort2

while true; mache Datum >> /vat/tmp/watch.log; sleep 600; ls -l Dateiname >> /var/tmp/watch.log; fertig

Mir gefällt die von Artem oben erwähnte while-Schleife, aber ich wollte die Daten in einer Datei speichern, damit ich sie analysieren kann, wenn ich zurückkomme, und habe daher Weiterleitungen zu einer Datei hinzugefügt. In meinem Fall beobachte ich die Datei alle 10 Minuten und prüfe die Dateigröße mit ls -l

-Jay

Antwort3

Ich mag Oli'smodifizierte watchLösung, aber mir gefällt die Idee, das Protokoll in Echtzeit anzuzeigen, anstatt später darin herumzuwühlen.

Hier ist eine Idee:

watch 'echo $(date && command 2>&1 | tail -n 1) >> watchlog.log && cat watchlog.log | tail'

Erläuterung:

  • echovermeidet einen Zeilenumbruch zwischen dateund command.
  • >>hängt es an die Datei an, dasselbe wie, | tee -ajedoch ohne zusätzliche Duplizierung in watchder Ausgabe.
  • 2>&1kombiniert stderr mit stdout, um sicherzustellen, dass Sie alles sehen, einschließlich Fehler.
  • | tail -n 1beschränkt die Ausgabe auf die letzte Zeile (die die dateAusgabe enthält), um eine sauberere Echtzeitanzeige zu ermöglichen. Dies kann Ihr Wunsch für den Inhalt der Protokolldatei sein, muss es aber nicht.

verwandte Informationen