Estou tentando descobrir quanto tempo levará um progresso para não codificar um período de tempo definido. Estou tentando fazer isso sem adicionar novas bibliotecas. o comando pv parece bastante popular, mas meu sistema não o suporta por algum motivo. Presumo que exista uma maneira do SIGINFO obter essas informações. Tentei fazer um while [ ! -z pgrep command ] do \\logic
para executá-lo enquanto a tarefa existe. Isto é para um carregamento% para o seguinte código:
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
Este é o código para 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
A lógica do código funciona é que estou apenas tentando atribuir valores dinamicamente taskCount
e/ taskDone
ou encontrar uma maneira diferente de calcular o início até a conclusão da tarefa.
Não há uma maneira fácil de saber quanto tempo (ou quantas etapas, repetições) uma tarefa precisará, a menos que você execute a tarefa sempre da mesma maneira (quando você pode fazê-lo uma vez e usar as informações obtidas).
Então, para que seu script realmente funcione:
... esse texto:
... precisa de um extras
Então pode funcionar... mas antes de descobrir o que foi dito acima, escrevi isto: