使用带有 -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.
上试过这个
我有一个输入在几秒钟后超时,但为了让它不那么刺耳,我希望它显示剩余时间。我该怎么做?
我认为 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.
上试过这个