如何在 Linux 终端上显示实时倒数计时器?是否有现成的应用程序,或者更好的是,有一行代码可以做到这一点?
答案1
我不确定你为什么需要beep
。如果你只想要一个秒表,你可以这样做:
while true; do printf '%s\r' "$(date)"; done
这将显示实时流逝的秒数,你可以使用Ctrl+停止它C。如果你需要更高的精度,你可以使用它来显示纳秒:
while true; do printf '%s\r' "$(date +%H:%M:%S:%N)"; done
最后,如果你真的非常想要“秒表格式”,其中一切都从 0 开始并开始增长,你可以执行以下操作:
start=$(date +%s)
while true; do
time="$(($(date +%s) - $start))"
printf '%s\r' "$(date -u -d "@$time" +%H:%M:%S)"
done
对于倒计时器(这不是您最初的问题所要求的),您可以这样做(相应地更改秒数):
seconds=20
start="$(($(date +%s) + $seconds))"
while [ "$start" -ge `date +%s` ]; do
time="$(( $start - `date +%s` ))"
printf '%s\r' "$(date -u -d "@$time" +%H:%M:%S)"
done
您可以使用 bash(或您喜欢的任何 shell)函数将这些命令组合成简单的命令。在 bash 中,将这些行添加到您的~/.bashrc
(这sleep 0.1
将使系统在每次运行之间等待 1/10 秒,这样您就不会浪费 CPU):
countdown() {
start="$(( $(date '+%s') + $1))"
while [ $start -ge $(date +%s) ]; do
time="$(( $start - $(date +%s) ))"
printf '%s\r' "$(date -u -d "@$time" +%H:%M:%S)"
sleep 0.1
done
}
stopwatch() {
start=$(date +%s)
while true; do
time="$(( $(date +%s) - $start))"
printf '%s\r' "$(date -u -d "@$time" +%H:%M:%S)"
sleep 0.1
done
}
然后,您可以通过运行以下命令启动一分钟的倒计时器:
countdown 60
您可以使用以下方式倒计时两个小时:
countdown "$((2 * 60 * 60))"
或一整天使用:
countdown "$((24 * 60 * 60))"
并通过运行以下命令启动秒表:
stopwatch
如果您需要处理天、小时、分钟和秒,您可以执行以下操作:
countdown() {
start="$(( $(date +%s) + $1))"
while [ "$start" -ge $(date +%s) ]; do
## Is this more than 24h away?
days="$(($(($(( $start - $(date +%s) )) * 1 )) / 86400))"
time="$(( $start - `date +%s` ))"
printf '%s day(s) and %s\r' "$days" "$(date -u -d "@$time" +%H:%M:%S)"
sleep 0.1
done
}
stopwatch() {
start=$(date +%s)
while true; do
days="$(($(( $(date +%s) - $start )) / 86400))"
time="$(( $(date +%s) - $start ))"
printf '%s day(s) and %s\r' "$days" "$(date -u -d "@$time" +%H:%M:%S)"
sleep 0.1
done
}
stopwatch
请注意,由于我实在不想为此等待 24 小时,因此该功能已经好几天没有测试了。它应该可以工作,但如果不行,请告诉我。
答案2
我最喜欢的方式是:
开始:
time cat
停止:
ctrl+c
正如@wjandrea 在下面评论的那样,另一个版本是运行:
time read
并按下Enter
停止
答案3
我也正在寻找同样的东西并最终用 Python 写了一些更复杂的东西:
这将为你提供一个简单的 10 秒倒计时:
pip install termdown
termdown 10
答案4
简短回答:
for i in `seq 60 -1 1` ; do echo -ne "\r$i " ; sleep 1 ; done
解释:
我知道有很多答案,但我只想发布一些与 OP 问题非常接近的内容,我个人认为确实如此”终端中的一行倒计时“我的目标是:
- 一句话。
- 倒数。
- 易于记忆并在控制台中输入(无功能和繁重逻辑,仅限 bash)。
- 不需要安装额外的软件(可以在我通过 ssh 访问的任何服务器上使用,即使我没有 root 权限)。
怎么运行的:
seq
打印从 60 到 1 的数字。echo -ne "\r$i "
返回到字符串开头的插入符号并打印当前值。如果字符数比当前值长(10 -> 9),$i
则后面需要空格来覆盖先前的值。$i