Wie kann ich einen Echtzeit-Countdown-Timer auf dem Linux-Terminal anzeigen? Gibt es eine bestehende App oder noch besser einen One Liner, um dies zu tun?
quelle
Wie kann ich einen Echtzeit-Countdown-Timer auf dem Linux-Terminal anzeigen? Gibt es eine bestehende App oder noch besser einen One Liner, um dies zu tun?
Ich bin mir nicht sicher, warum Sie das brauchen beep
. Wenn Sie nur eine Stoppuhr wollen, können Sie dies tun:
while true; do echo -ne "`date`\r"; done
Das zeigt Ihnen die Sekunden in Echtzeit und Sie können es mit Ctrl+ stoppen C. Wenn Sie eine höhere Genauigkeit benötigen, können Sie diese verwenden, um Nanosekunden zu erhalten:
while true; do echo -ne "`date +%H:%M:%S:%N`\r"; done
Wenn Sie wirklich, wirklich "Stoppuhr-Format" wollen, bei dem alles bei 0 beginnt und wächst, können Sie Folgendes tun:
date1=`date +%s`; while true; do
echo -ne "$(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)\r";
done
Für einen Countdown-Timer (was nicht Ihre ursprüngliche Frage ist) können Sie dies tun (ändern Sie die Sekunden entsprechend):
seconds=20; date1=$((`date +%s` + $seconds));
while [ "$date1" -ge `date +%s` ]; do
echo -ne "$(date -u --date @$(($date1 - `date +%s` )) +%H:%M:%S)\r";
done
Sie können diese zu einfachen Befehlen kombinieren, indem Sie bash-Funktionen (oder die von Ihnen bevorzugte Shell) verwenden. Fügen Sie in bash die folgenden Zeilen zu Ihrer hinzu ~/.bashrc
(dadurch sleep 0.1
wartet das System zwischen jedem Durchlauf eine Zehntelsekunde, damit Sie Ihre CPU nicht spammen):
function countdown(){
date1=$((`date +%s` + $1));
while [ "$date1" -ge `date +%s` ]; do
echo -ne "$(date -u --date @$(($date1 - `date +%s`)) +%H:%M:%S)\r";
sleep 0.1
done
}
function stopwatch(){
date1=`date +%s`;
while true; do
echo -ne "$(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)\r";
sleep 0.1
done
}
Sie können dann einen Countdown-Timer von einer Minute starten, indem Sie Folgendes ausführen:
countdown 60
Sie können zwei Stunden zählen mit:
countdown $((2*60*60))
oder einen ganzen Tag mit:
countdown $((24*60*60))
Und starten Sie die Stoppuhr mit:
stopwatch
Wenn Sie in der Lage sein müssen, mit Tagen sowie Stunden, Minuten und Sekunden umzugehen, können Sie Folgendes tun:
countdown(){
date1=$((`date +%s` + $1));
while [ "$date1" -ge `date +%s` ]; do
## Is this more than 24h away?
days=$(($(($(( $date1 - $(date +%s))) * 1 ))/86400))
echo -ne "$days day(s) and $(date -u --date @$(($date1 - `date +%s`)) +%H:%M:%S)\r";
sleep 0.1
done
}
stopwatch(){
date1=`date +%s`;
while true; do
days=$(( $(($(date +%s) - date1)) / 86400 ))
echo -ne "$days day(s) and $(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)\r";
sleep 0.1
done
}
Beachten Sie, dass die stopwatch
Funktion seit Tagen nicht mehr getestet wurde, da ich eigentlich nicht 24 Stunden darauf warten wollte. Es sollte funktionieren, aber bitte lassen Sie es mich wissen, wenn es nicht funktioniert.
.zshrc
Rechten hinzugefügt, nachdem ich Ihre Antwort gelesen habe. Heute habe ichcountdown
das erste Mal benutzt und eine ziemlich hohe CPU-Auslastung festgestellt. Ich fügte einsleep 0.1
(ich weiß nicht, ob eine Ruhezeit von einem Bruchteil einer Sekunde auf allen Systemen unterstützt wird) hinzu, das das viel verbesserte. Der Nachteil ist natürlich eine weniger genaue Anzeigegenauigkeit, aber ich kann mit einer Abweichung von max. 100ms.bash
, kann ich damit leben (obwohl es ist höher als ich erwartet hatte , und ich habe auch den Schlaf zu meinem eigenen .bashrc hinzugefügt).date +%s
- $ date1)) +% H:% M:% S) ";echo -ne "$(date -ju -f %s $(($date1 -
Datum +% s)) +%H:%M:%S)\r"
;play -q -n synth 2 pluck C5
.Mein Lieblingsweg ist:
Anfang:
Halt:
Wie @wjandrea unten kommentiert, ist eine andere Version auszuführen:
und drücken Sie
Enter
, um zu stoppenquelle
time read
time read
schlägt in zsh fehl,time (read)
funktioniert aber .Ich suchte das Gleiche und schrieb am Ende etwas ausführlicheres in Python:
Dies gibt Ihnen einen einfachen Countdown von 10 Sekunden:
Quelle: https://github.com/trehn/termdown
quelle
Ich habe diesen benutzt:
Beispiel:
Hier ist eine Quelle .
quelle
Stellen Sie einen Timer für 15 Minuten ein
edit: Ich hatte eine Reihe von Links offen, und ich dachte, dies sei spezifisch für osx, tut mir leid. Lassen Sie meine Antwort offen, damit andere wissen, dass sie in den BSDs Urlaub haben.
quelle
Dies ist für eine Stoppuhr mit Hundertstelsekunden:
Beispiel
quelle
return $1
Ich habe die sehr gute Antwort von terdon in eine Funktion zusammengefasst, die gleichzeitig die Zeit seit dem Start und die Zeit bis zum Ende anzeigt. Es gibt auch drei Varianten, so dass es einfacher ist aufzurufen (Sie müssen keine Bash-Berechnungen durchführen) und es ist auch abstrahiert. Anwendungsbeispiel :
Und so etwas wie Arbeitstimer:
Und wenn Sie eine ganz bestimmte Zeit brauchen:
Hier ist der Code , der in Ihre .bashrc eingefügt werden soll
Kombinieren Sie dies mit einem gewissen Art und Weise von Spielen Sound in Linux - Terminal ( Wiedergabe von MP3 oder WAV - Datei über Linux - Befehlszeile ) oder Cygwin (
cat /path/foo.wav > /dev/dsp
funktioniert für mich in Babun / win7) und Sie haben einen einfachen flexible Timer mit Alarm !quelle
Ein anderer Ansatz
Für Mac:
Wenn man ein Signal haben möchte, wenn es Null erreicht, kann man es beispielsweise mit einem Befehl erstellen, der einen Exit-Status ungleich Null bei Null zurückgibt, und es mit
watch -b
etwas anderem kombinieren , aber wenn man ein ausführlicheres Skript erstellen möchte, ist dies wahrscheinlich nicht der Weg zu gehen; Es handelt sich eher um eine "schnelle und schmutzige Einzeiler" -Lösung.Ich mag das
watch
Programm im Allgemeinen. Ich habe es zum ersten Mal gesehen, nachdem ich bereits unzähligewhile sleep 5; do
Loops mit unterschiedlichen Effekten geschrieben hatte.watch
war nachweislich schöner.quelle
Am Ende habe ich mein eigenes Shell-Skript geschrieben: github gist
quelle
Ich bin überrascht, dass niemand das
sleepenh
Tool in seinen Skripten verwendet hat. Stattdessen verwenden die vorgeschlagenen Lösungen entweder einesleep 1
zwischen aufeinanderfolgenden Zeitgeberausgaben oder eine Besetztschleife, die so schnell wie möglich ausgibt. Ersteres ist unzureichend, da aufgrund der geringen Zeit, die für das Drucken aufgewendet wird, die Ausgabe nicht einmal pro Sekunde erfolgt, sondern etwas weniger als die suboptimale. Wenn genügend Zeit verstrichen ist, überspringt der Zähler eine Sekunde. Letzteres ist unzureichend, da die CPU ohne triftigen Grund ausgelastet ist.Das Tool, das ich in meinem habe,
$PATH
sieht so aus:Das Skript kann entweder als Stoppuhr (bis zur Unterbrechung hochgezählt) oder als Timer verwendet werden, der für die angegebene Zeitdauer ausgeführt wird. Da der
sleep
Befehl verwendet wird, können Sie mit diesem Skript die Dauer angeben, für die mit derselben Genauigkeit gezählt werden soll, wie Sie diessleep
zulassen. Unter Debian und Derivaten umfasst dies einen Ruhezustand von weniger als einer Sekunde und eine gut lesbare Möglichkeit, die Zeit anzugeben. So kann man zum Beispiel sagen:Und wie Sie sehen, lief der Befehl genau 2 Minuten und 4,6 Sekunden, ohne viel Magie im Skript selbst.
EDIT :
Das sleepenh-Tool stammt aus dem gleichnamigen Paket in Debian und seinen Derivaten wie Ubuntu. Für Distributionen, die es nicht haben, stammt es von https://github.com/nsc-deb/sleepenh
Der Vorteil von sleepenh ist, dass es in der Lage ist, die geringe Verzögerung zu berücksichtigen, die sich im Laufe der Zeit aus der Verarbeitung anderer Dinge als dem Schlaf während einer Schleife ergibt. Selbst wenn man nur
sleep 1
10 Mal in einer Schleife wäre, würde die Gesamtausführung etwas mehr als 10 Sekunden dauern, da die Ausführungsleep
und das Iterieren der Schleife einen geringen Mehraufwand verursachen . Dieser Fehler häufte sich langsam an und würde unsere Stoppuhr mit der Zeit immer ungenauer machen. Um dieses Problem zu beheben, muss für jede Schleifeniteration die genaue Ruhezeit berechnet werden, die normalerweise etwas kürzer als eine Sekunde ist (für Zeitintervalle von einer Sekunde). Das sleepenh-Tool erledigt dies für Sie.quelle
sleep 0.1
. Was istsleepnh
(ich kann es nicht in den Arch-Repos finden) und wie unterscheidet es sich vonsleep
? Soweit ich das beurteilen kann, tun Sie im Grunde das Gleiche wie meine obige Antwort. Was vermisse ich?sleep 5
ist, dass Sie genau 5 Sekunden lang nicht schlafen. Versuchen Sie es zum Beispieltime sleep 5
und Sie sehen, dass das Ausführen des Befehls etwas mehr als 5 Sekunden dauert. Im Laufe der Zeit häufen sich die Fehler. Mit dem Dienstprogramm sleepenh können Sie diese Häufung von Fehlern auf einfache Weise vermeiden.sleepnh
besser ist alssleep
(Sie sagen nur, dass andere Antwortensleep 1
dies nicht tun) , nur das OP benutzt das) und ii), wo man es bekommt und wie man es installiert, da es kein Standardwerkzeug ist.sleep
undsleepenh
im ersten Absatz erklärt. Jedenfalls war mir das wahrscheinlich nicht klar genug, so dass ich am Ende mehr darauf einging. Die Millisekunden-Genauigkeitsprobleme treten auf, wenn Siesleep
einmal anrufen . Sie häufen sich mit der Zeit an und irgendwann ist dies bemerkbar. Ich habe nicht gesagt, dass andere nur verwendensleep 1
. Ich sagte, dass siesleep 1
oder eine Busyloop verwenden. Was sie immer noch tun. Zeigen Sie mir ein Gegenbeispiel. Die Antwortensleep 0.1
sind die gleichen wie die, mit dersleep 1
Ausnahme, dass sie Fehler noch schneller ansammeln.Kurze Antwort:
Erläuterung:
Ich weiß, dass es viele Antworten gibt, aber ich möchte nur etwas sehr Nahes an der Frage von OP posten, die ich persönlich als " Oneliner Countdown im Terminal " akzeptieren würde . Meine Ziele waren:
Wie es funktioniert:
seq
druckt Zahlen von 60 bis 1.echo -ne "\r$i "
Bringt das Caret an den Anfang der Zeichenkette zurück und gibt den aktuellen$i
Wert aus. Leerzeichen nach dem Überschreiben des vorherigen Werts, wenn dieser länger als der aktuelle Wert war$i
(10 -> 9).quelle
Zum späteren Nachschlagen gibt es ein Befehlszeilentool namens µTimer mit sehr einfachen Befehlszeilenoptionen für einen Countdown / Countup -Timer.
quelle
Stellen Sie sich als OSX-Benutzer vor, der nach einer Stoppuhr für die Befehlszeile sucht. Stellen Sie sich vor, Sie möchten die Gnu-Tools nicht installieren und nur mit dem Unix laufen
date
in diesem Fall mache wie @terdon sagt, aber mit dieser Modifikation:
quelle
Verwenden Sie einfach watch + date in UTC-Zeit. Sie können auch ein Paket für große Displays installieren ...
Versuch es!
Siehe auch http://www.cyberciti.biz/faq/create-large-colorful-text-banner-on-screen/
quelle
sw ist eine einfache Stoppuhr, die für immer läuft.
Installieren
Verwendungszweck
quelle
Ein Python-Beispiel:
quelle
Werfen Sie einen Blick auf TermTime , es ist eine schöne terminalbasierte Uhr und Stoppuhr:
pip install termtime
quelle
Dies ist ähnlich wie die akzeptierte Antwort, aber Terdon
countdown()
hat mir Syntaxfehler gegeben. Dieser funktioniert jedoch hervorragend für mich:function timer() { case "$1" in -s) shift;; *) set $(($1 * 60));; esac; local S=" "; for i in $(seq "$1" -1 1); do echo -ne "$S\r $i\r"; sleep 1; done; echo -e "$S\rTime's up!"; }
Sie können es
.bashrc
eingeben und dann ausführen mit:timer t
(wobei t die Zeit in Minuten ist).quelle
Ich habe diese Frage heute früher gefunden, als ich nach einer Semesteranwendung suchte, um einen großen Countdown-Timer für einen Workshop anzuzeigen. Keiner der Vorschläge war genau das, was ich brauchte, also habe ich schnell einen anderen in Go: https://github.com/bnaucler/cdown zusammengestellt
Da die Frage bereits ausreichend beantwortet ist, halten Sie dies für die Nachwelt.
quelle
$ sleep 1500 && xterm -fg gelb -g 240x80 &
Wenn das große Terminal mit dem gelben Text aufspringt, ist es Zeit aufzustehen und sich zu strecken!
Anmerkungen: - 1500 Sekunden = 25 Minuten Pomodoro - 240x80 = Terminalgröße mit 240 Zeichen und 80 Zeilen. Füllt einen Bildschirm für mich spürbar aus.
Bildnachweis: http://www.linuxquestions.org/questions/linux-newbie-8/countdown-timer-for-linux-949463/
quelle
Eine GUI-Version der Stoppuhr
quelle
Wenn Sie aus irgendeinem Grund ein kompilierbares Programm wünschen, funktioniert Folgendes:
Dies kann auch in anderen Programmen verwendet und einfach portiert werden, wenn keine Bash-Umgebung verfügbar ist oder Sie nur ein kompiliertes Programm bevorzugen
Github
quelle