确定进度条的任务长度

确定进度条的任务长度

我正在尝试找到一种方法来了解完成一个过程需要多长时间,这样我就不用硬编码一个固定的时间长度。我试图在不添加任何新库的情况下做到这一点。pv 命令似乎很流行,但我的系统由于某种原因不支持它。我假设有一种方法 SIGINFO 可以获取此信息。我尝试while [ ! -z pgrep command ] do \\logic在任务存在时运行它。这是针对以下代码的负载百分比:

 if [  "$selected_choice" == "Go Back" ]
  then gsettings set org.gnome.desktop.peripherals.keyboard repeat false && echo -en "\e" #This is the escape sequence in the first menu.
  else cd && cd $search_dir && jar cf $file $fileclass & bash ~/Bash_Files/Bash_Animations/load3.sh
fi

这是 load3.sh 的代码

#!/bin/bash

progressBarWidth=20

# Function to draw progress bar
progressBar () {

  # Calculate number of fill/empty slots in the bar
  progress=$(echo "$progressBarWidth/$taskCount*$tasksDone" | bc -l)  
  fill=$(printf "%.0f\n" $progress)
  if [ $fill -gt $progressBarWidth ]; then
    fill=$progressBarWidth
  fi
  empty=$(($fill-$progressBarWidth))

  # Percentage Calculation
  percent=$(echo "100/$taskCount*$tasksDone" | bc -l)
  percent=$(printf "%0.2f\n" $percent)
  if [ $(echo "$percent>100" | bc) -gt 0 ]; then
    percent="100.00"
  fi

  # Output to screen
  ## https://unix.stackexchange.com/questions/664055/how-to-print-utf-8-symbols this is why %s and %b are used
  ## ORGINAL
  ##printf "\r["
  ##printf "%${fill}s" '' | tr ' ' ▉
  ##printf "%${empty}s" '' | tr ' ' ░
  ##printf "] $percent%% - $text "
  
  #This is for GNU users as UNICODE charaters do not work on their terminal
  printf "\r["
  printf "%${fill}s" '' | sed 's/ /\o342\o226\o210/g'
  printf "%${empty}s" '' | sed 's/ /\o342\o226\o221/g'
  printf "] $percent%% - $text "
}



## Collect task count
taskCount=33
tasksDone=0

while [ $tasksDone -le $taskCount ]; do

  # Do your task
  (( tasksDone += 1 ))

  # Can add some friendly output
  # text=$(echo "somefile-$tasksDone.dat")

  # Draw the progress bar
  progressBar $taskCount $taskDone $text

  sleep 0.01
done

echo

代码工作的逻辑是我只是试图动态地分配值和taskCount/taskDone或找到一种不同的方式来计算任务的开始到完成。

答案1

没有简单的方法可以判断一项任务需要多长时间(或多少步骤、重复),除非您每次都以相同的方式运行该任务(您可以执行一次并使用获得的信息)。

然后,让你的脚本真正起作用:

...此文本:

进度条 $任务计数 $任务完成 $文本
...需要额外的s

                     ------- 五
进度条 $任务数 $任务完成 $文本

那么它可能会起作用...但在我发现上述内容之前我写了这个:

函数进度条 {
  全部=“$1”
  现在=“$2”
  txt="$3"
  全部=48
  pcnt=$(( ( $现在 * 100 ) / $全部 ))
  如果 [ $pcnt -gt 100 ] ;则 pcnt=100; fi
  部分=$(( $全部 * $pcnt / 100 ))
  其余=$(($全部-$部分))
  echo -en "\r$(
    printf“%0${part}s”| sed -re's//#/g'&&  
    printf“%0${rest}s”| sed -re's/ /./g')-$txt”
}

相关内容