bash - 如何在秒表中同时使用 read 和 while
问题描述
我决定制作一个简单的秒表,并在源代码中找到了这段代码,stackowerflow
但我在读取命令时遇到了问题。如何使秒表与输入(读取)同时工作?所以秒表显示时间,但稍微低一点是进入的邀请。
START=$(date +%s)
while true; do
NOW=$(date +%s)
DIFF=$(( $NOW - $START ))
SECS=$(( $DIFF % 60 ))
MIN=$(( $DIFF / 60 ))
HOURS=$(( $DIFF / 3600 ))
printf "\r%02d:%02d:%02d" $HOURS $MIN $SECS
sleep 1
read -p "Stop/Reset -> " INT
done
此代码显示 1 秒,然后要求输入Stop/Reset ->
,但如何使秒表继续工作。有任何想法吗?谢谢
解决方案
只需使用-t
读取选项。像这样
START=$(date +%s)
while true; do
NOW=$(date +%s)
DIFF=$(( $NOW - $START ))
SECS=$(( $DIFF % 60 ))
MIN=$(( $DIFF / 60 ))
HOURS=$(( $DIFF / 3600 ))
printf "\r%02d:%02d:%02d" $HOURS $MIN $SECS
# -t 1 wait at max 1 second for a key to be pressed
# -n 1 only expect one character (no enter required)
read -t 1 -n 1 -p "Stop/Reset -> " ANS
if [[ "${ANS}" == "s" ]] ; then
break
fi
if [[ "${ANS}" == "r" ]] ; then
START=$(date +%s)
fi
done
推荐阅读
- elasticsearch - elasticsearch节点不活跃
- google-sheets - 从工作表 1 中的单元格中调用工作表名称以从具有自定义名称的工作表中调用数据
- nginx - 不要写端口并添加应用程序名称以进行远程访问
- javascript - JSON API 返回未定义
- c# - 创建插入操作,但是在从 Model StudentView -> Student 转换并传递到 InsertStudentAsync 之后,函数返回 null
- python - 在这门课上我可以做得更好吗?Python 类重构
- bash - 如何在某些特定符号后的字符之间插入空格?
- node.js - 新创建项目的 sam local 调用超时(通过 sam init 创建)
- amazon-quicksight - QuickSight 仪表板中的动态文本字段
- javascript - EJS没有安装