我正在尝试找到一种方法来了解完成一个过程需要多长时间,这样我就不用硬编码一个固定的时间长度。我试图在不添加任何新库的情况下做到这一点。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” }