如何创建秒表Bash脚本以持续显示已用时间?
发布时间:2020-12-15 21:22:12 所属栏目:安全 来源:网络整理
导读:你可以把它想象成一个非常简单的秒表.我试图破解一个bash脚本,它显示自指定日期以来经过的时间并每秒更新输出. 首先,在脚本内部,您将指定一个UNIX日期:2011年4月14日星期四14:00:00.这将是秒表启动的时间. 现在,当你运行脚本时,你会看到…… 06D:10H:37米
你可以把它想象成一个非常简单的秒表.我试图破解一个bash脚本,它显示自指定日期以来经过的时间并每秒更新输出.
首先,在脚本内部,您将指定一个UNIX日期:2011年4月14日星期四14:00:00.这将是秒表启动的时间. 现在,当你运行脚本时,你会看到…… 06D:10H:37米:01S 几秒钟后你会看到…… 06D:10H:37米:05S 我不打算每过一秒就打印一条新线.该脚本应该只有1行输出,并且每秒更新一次.显然你可以随时退出脚本并重新启动它,因为开始时间是硬编码的,所以它仍然是正确的. 有任何想法吗? 解决方法
我在长时间运行的脚本中使用以下代码片段.
定时器在一个函数(单独的进程)中运行,如果主进程被keybord中断终止,它将被终止(陷阱).输出显示从计时器开始经过的时间: ... working [hh:mm:ss] 00:07:58 片段: #=== FUNCTION ================================================================ # NAME: progressIndicatorTime # DESCRIPTION: Display a progress indicator with seconds passed. # PARAMETERS: [increment] between 1 and 60 [sec],default is 2 [sec] #=============================================================================== function progressIndicatorTime () { declare default=2 # default increment [sec] declare increment="${1:-$default}" # 1. parameter or default declare format='bbbbbbbb%02d:%02d:%02d' # time format hh:mm:ss declare timepassed=0 declare seconds minutes hours [[ ! "$increment" =~ ^([1-9]|[1-5][0-9]|60)$]] && increment=$default printf " ... working [hh:mm:ss] 00:00:00" while : ; do # infinite loop ((seconds=timepassed%60)) ((minutes=timepassed/60)) ((hours=minutes/60)) ((minutes=minutes%60)) printf "$format" $hours $minutes $seconds sleep $increment || break # sleep ... ((timepassed+=increment)) done } # ---------- end of function progressIndicatorTime ---------- progressIndicatorTime & # run progress indicator declare progressIndicatorPid=${!} # save process ID trap "kill $progressIndicatorPid" INT TERM # trap keyboard interrupt # # run long command # kill -s SIGTERM $progressIndicatorPid # terminate progress indicator (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |