使用带有 -t 标志的读取时,我可以显示剩余时间吗?

When using read with the -t flag, can I display the time remaining?

我有一个输入在几秒钟后超时,但为了让它不那么刺耳,我希望它显示剩余时间。我该怎么做?

我认为 read -t 无法完成,但此脚本作为后台进程在另一行完成倒计时:

#!/bin/bash

function displayCountdown {
  ((remaining=))
  while [ $remaining -gt 0 ]
  do
    tput sc # save cursor pos
    tput cuu1 # go up one line
    tput cub 80 # go 80 chars left
    tput el # clear to eol
    ( echo -n "$remaining second(s) remaining" ) >&2
    tput rc # restore saved cursor pos
    ((remaining=remaining-1))
    sleep 1
  done
  echo
}

NUM_SECONDS=5

## the first echo is needed
echo ; displayCountdown $NUM_SECONDS & read -t $NUM_SECONDS ; RC=$? ; kill -9 $! ; wait $! 2>/dev/null

echo "Got ($RC): $REPLY"

exit 0

它并不完美。例如,当按下 delete 键时,它有时会产生 ^R 并使终端有点混乱。但是,如果您决定使用它,也许可以使用一些 stty 设置来解决这个问题。

我在 Mac 上试过这个。我还没有在 Linux.

上试过这个