有没有办法在终端中显示倒计时或秒表计时器?

有没有办法在终端中显示倒计时或秒表计时器?

如何在 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

来源:https://github.com/trehn/termdown

答案4

简短回答:

for i in `seq 60 -1 1` ; do echo -ne "\r$i " ; sleep 1 ; done

解释:

我知道有很多答案,但我只想发布一些与 OP 问题非常接近的内容,我个人认为确实如此”终端中的一行倒计时“我的目​​标是:

  1. 一句话。
  2. 倒数。
  3. 易于记忆并在控制台中输入(无功能和繁重逻辑,仅限 bash)。
  4. 不需要安装额外的软件(可以在我通过 ssh 访问的任何服务器上使用,即使我没有 root 权限)。

怎么运行的:

  1. seq打印从 60 到 1 的数字。
  2. echo -ne "\r$i "返回到字符串开头的插入符号并打印当前值。如果字符数比当前值长(10 -> 9),$i则后面需要空格来覆盖先前的值。$i

相关内容