Stoppuhr

  Ralf Hersel   Lesezeit: 3 Minuten Auf Mastodon ansehen

Auf der Suche nach einer einfachen Stoppuhr für das Terminal.

stoppuhr

Manchmal benötigt man eine Stoppuhr, um die Dauer von Abläufen zu messen. So wollte ich am Montag messen, wie lange ein Seedvault-Backup dauert. Da ich gerade im Terminal unterwegs war, habe ich nach einem Stoppuhr-Kommando gesucht. Selbstverständlich bieten (wahrscheinlich) alle Desktop-Umgebungen ein grafisches Werkzeug für diesen Zweck an. Bei GNOME heisst es "Uhren" und die Stoppuhr sieht so aus:

Wie ihr seht, beherrscht die Anwendung zudem Weltzeituhren, einen Wecker und einen Timer. Fall gelöst; Artikel beendet. Moooment, nicht so schnell. Die Anforderung war, eine Stoppuhr im Terminal zu haben.

Um es vorwegzunehmen, die gibt es nicht. Zumindest nicht mit Boardmitteln und in einfach. Natürlich gibt es drölfzig Möglichkeiten, eine Stoppuhr im Terminal umzusetzen. Einige davon möchte ich euch vorstellen.

Mit an Bord

Ein Blick in meine ZIM-Wissensdatenbank verrät mir zwei Varianten, nämlich:

  • bash: time read (mit RETURN beenden)
  • zsh: time cat (mit Ctrl+c beenden)

Da ich die Z-Shell in der Manjaro-Konfiguration verwende, macht `time read` bei mir nicht viel:

In der Z-Shell läuft der Befehl in dieser Form: time (read). Aufgrund der Terminalkonfiguration funktioniert das trotzdem, weil rechts immer die Dauer des letzten Befehls angezeigt wird. Bei 'time cat' sieht das anders aus:

Nach dem Abbruch mit Ctrl+c wird die verstrichene Zeit ausgegeben.

Dann wollte ich oberschlau sein. Da mein Terminal ohnehin die Befehlsdauer anzeigt, habe ich es mit einem No-Operation-Kommando versucht. Bei Linux ist das der Doppelpunkt : . Dieser Befehl macht nichts. Leider macht er wirklich nichts, dass heisst, er wartet auch nicht auf irgendetwas. Damit ist er als Stoppuhr nicht zu gebrauchen.

Wie wäre es denn mit 'sleep 1h'? Das funktioniert auch nur, wenn euer Terminal von sich aus die Zeit anzeigt.

Per Skript

Wenn es schon keine einfachen Befehle gibt, bietet sich ein kurzes Shellskript als Lösung an. Damit lässt sich auch eine kontinuierliche Zeitanzeige verwirklichen. Den einfachsten Einzeiler, den ich gefunden habe, lautet:

SECONDS=0; while :; do echo -ne "\r$SECONDS"; sleep 1; done

Dieser Befehl zeigt die verstrichenen Sekunden kontinuierlich in einer Zeile an. Damit das in einer Zeile bleibt und nicht hintereinander geschrieben wird, sind die Parameter -ne und \r notwendig. Die Shell-Variable $SECONDS zählt die Sekunden, seitdem ein Skript oder eine Shell gestartet wurde. Deshalb muss sie auf 0 gesetzt werden, weil sie ansonsten die Sekunden seit dem Starten des Terminals enthält. Der Doppelpunkt hinter dem WHILE ist eine Kurzform von True (siehe oben: NOOP).

Falls ihr damit zufrieden seid, könnt ihr den Befehl in einen Alias packen. Selbstverständlich gibt es noch tausende andere Shellskripte, die die Sache schöner und länger machen, zum Beispiel SW von Cory Klein. Dieses 9 Jahre alte Shellskript setzt meine Anforderungen gut um. Es zeigt die Stoppuhr kontinuierlich und vollständig an. Ausserdem kann man mit der RETURN-Taste Zwischenzeiten erhalten.

Das Skript kann man von hier herunterladen, als Datei 'sw' speichern, ausführbar machen und dem Pfad hinzufügen.

Falls euch etwas Einfacheres einfällt, um die Zeit im Terminal zu messen, schreibt es bitte in die Kommentare.

Titelbild: https://pixabay.com/illustrations/stopwatch-precision-quick-record-2648253/

Quelle: https://github.com/coryfklein/sw

Tags

Stoppuhr, Uhr, Terminal, Zeit

Es wurden noch keine Kommentare verfasst, sei der erste!