Für einen Bash-Timer verwende ich diesen Code:
#!/bin/bash
sek=60
echo "60 Seconds Wait!"
echo -n "One Moment please "
while [ $sek -ge 1 ]
do
echo -n "$sek "
sleep 1
sek=$[$sek-1]
done
echo
echo "ready!"
Das gibt mir so etwas
One Moment please: 60 59 58 57 56 55 ...
Gibt es eine Möglichkeit, den letzten Wert der Sekunde durch den neuesten zu ersetzen, sodass die Ausgabe keine große Spur erzeugt, sondern den Sekundencountdown wie eine Echtzeit an einer Position? (Hoffe du verstehst was ich meine :))
watch
Befehl zu tun , obwohl ich nicht genau weiß, wie ich es tun soll.Antworten:
quelle
\r
. Siehe meine Antwort.The old format $[expression] is deprecated and will be removed in upcoming versions of bash.
. Verwenden Sie stattdessen das POSIX$((expression))
oder den((
-Befehl. ZBsek=$(( sek - 1 ))
oder(( sek = sek - 1 ))
oder(( sek-- ))
.Grundsätzlich das Gleiche wie die Antwort von aneeshep, jedoch wird Return (
\r
) anstelle von Backspace (\b
) verwendet, da wir nicht wissen, ob die Länge immer gleich ist, z$sek < 10
. B. wann .Auch Ihre erste
echo
sollte verwenden$sek
, nicht hartcodieren60
.Beachten Sie zum Schluss das Leerzeichen nach dem
...
.quelle
Mit bash können Sie die spezielle Variable verwenden
SECONDS
.quelle
SECONDS
Diese Variable wird um die Anzahl der Sekunden erweitert, die seit dem Start der Shell vergangen sind. (also würde ich es wahrscheinlich nicht auf 0 setzen ..Zusätzlich zu
\r
oder\b
Annäherungen ist es möglich, das\033[2K
Steuerzeichen zu verwenden , das das Terminal anweist, die gesamte Zeile zu löschen. Der Vorteil im Vergleich zu\b
ist, dass Sie\b
die Anzahl der Zeichen nicht mit der Anzahl der zu löschenden Zeichen abgleichen müssen und\r
dass keine Zeichen auf dem Bildschirm hervorstehen, wenn die neue Zeile kürzer als die alte ist eins.Unten ist das Beispiel dafür , wie es auf diese Frage angewandt werden, und hier ist ein Beispiel für die zugehörige Anwendung Ausgabe ähnlich Boot - Meldungen zu erstellen. In diesem speziellen Beispiel wird der Timer gelöscht, sobald die 0. Sekunde erreicht ist, und die Timer-Zeile wird durch "Bereit!" Ersetzt. Phrase.
Eine andere Alternative wäre, einen
dialog
Befehl zum Erstellen einfacher Dialoge in der Befehlszeile zu verwenden. Der Dialog bleibt für die Dauer des Timers auf dem Bildschirm und wird mit der Schleife aktualisiert. Wenn der Vorgang abgeschlossen ist, wird der Timer nahtlos durch die Meldung "Ready! Press to exit" ersetzt:quelle
dialog
existiert nicht auf Mac: /Dies ist, was ich nach dem Lesen hier und ein bisschen mehr, die Einzeiler:
Besser lesbar:
Wobei SEC auf eine beliebige positive Ganzzahl gesetzt werden kann und der printf für eine angemessene Polsterung sorgt. Getestet unter Ubuntu und Cygwin.
quelle
Kann es durch die Platzierung Wagenrücklauf erreichen
\r
.In einer einzigen Codezeile ist es mit möglich
echo -ne
oder mit
printf
quelle
Countdown-Timer:
und die "normale" Stoppuhr ist:
Strg + c zum Stoppen
quelle