加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何创建秒表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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读