jer*_*rzy 4 bash time stopwatch elapsedtime
你可以把它想象成一个非常简单的秒表.我试图破解一个bash脚本,它显示自指定日期以来经过的时间并每秒更新输出.
首先,在脚本内部指定一个UNIX日期:Fri Apr 14 14:00:00 EDT 2011.这将是秒表开始的时候.
现在,当你运行脚本时,你会看到......
06d:10h:37m:01s
几秒钟后你会看到......
06d:10h:37m:05s
我不打算每过一秒就打印一条新线.该脚本应该只有1行输出,并且每秒更新一次.显然你可以随时退出脚本并重新启动它,因为开始时间是硬编码的,所以它仍然是正确的.
有任何想法吗?
我在长时间运行的脚本中使用以下代码片段.定时器在一个函数(单独的进程)中运行,如果主进程被keybord中断终止,它将被终止(陷阱).输出显示从计时器开始经过的时间:
... working [hh:mm:ss] 00:07:58
Run Code Online (Sandbox Code Playgroud)
片段:
#=== 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='\b\b\b\b\b\b\b\b%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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2491 次 |
| 最近记录: |