Ich bin mir nicht sicher, warum Sie beep
benötigen, wenn Sie nur eine Stoppuhr wollen, können Sie dies tun:
while true; do echo -ne "`date`\r"; done
Das zeigt Ihnen die vergehenden Sekunden in Echtzeit an und Sie können es mit Strg+C stoppen. Wenn Sie eine höhere Präzision benötigen, können Sie dies verwenden, um Nanosekunden zu erhalten:
while true; do echo -ne "`date +%H:%M:%S:%N`\r"; done
Schließlich, wenn Sie wirklich, wirklich “Stoppuhr-Format” wollen, wo alles bei 0 beginnt und anfängt zu wachsen, könnten Sie so etwas 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 das ist, wonach Ihre ursprüngliche Frage fragte) könnten 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 in einfache Befehle kombinieren, indem Sie Funktionen der Bash (oder der von Ihnen bevorzugten Shell) verwenden. Fügen Sie in der Bash diese Zeilen zu Ihrem ~/.bashrc
hinzu (das sleep 0.1
lässt das System zwischen jedem Durchlauf 1/10 Sekunde warten, damit Sie Ihre CPU nicht überlasten):
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 ausführen:
countdown 60
Sie können zwei Stunden herunterzählen mit:
countdown $((2*60*60))
oder einen ganzen Tag mit:
countdown $((24*60*60))
Und starten Sie die Stoppuhr mit:
stopwatch
Wenn Sie neben Stunden, Minuten und Sekunden auch mit Tagen umgehen können müssen, könnten Sie so etwas 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 Funktion stopwatch
für Tage nicht getestet wurde, da ich nicht wirklich 24 Stunden darauf warten wollte. Es sollte funktionieren, aber bitte lassen Sie mich wissen, wenn es nicht funktioniert.