我想在脚本中构建一个时间流逝函数来每秒打印该时间,例如输出应如下所示:
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
使用bash
shell,您可以执行以下操作:
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