构建一个时间流逝函数

构建一个时间流逝函数

我想在脚本中构建一个时间流逝函数来每秒打印该时间,例如输出应如下所示:

finding files inside a directory
time elapse HH:MM:SS
  • HH 是小时
  • MM是分钟
  • SS第二

并且行时间经过等在脚本完成执行函数停止后在屏幕上不断计数 1 秒而不打印新行。

答案1

我会写一个秒表函数,就像我发布的那样这里,并调用它告诉它监视您正在运行的命令的进程 ID(请注意,这假设为 GNU date):

#!/bin/bash

stopwatch(){
    date1=`date +%s`; 
    while kill -0 $1 2>/dev/null; do 
        printf "Elapsed time: %s\r" "$(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)";
        sleep 0.1
    done
}

find /path/to/dir > output 2> error  &
stopwatch $!

Ctrl请注意,这种方法意味着如果您使用+终止脚本C,该find进程将继续在后台运行。斯特凡的解决方案是一个更好的主意。

答案2

使用bashshell,您可以执行以下操作:

elapse() (
  SECONDS=0
  while read -t1; (($? > 128)); do
    TZ=UTC0 printf >&2 '\rtime elapse %(%T)T' "$SECONDS"
  done
  echo >&2
)

{ long-running-command 4>&1 >&3 3>&- | elapse; } 3>&1

相关内容