-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathvprogress
executable file
·86 lines (72 loc) · 1.82 KB
/
vprogress
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!/bin/bash
#(C) Kirils Solovjovs, 2021
scale=60
scaletext="min"
precisehit=1
target=0
mmm='^[0-9]+$'
if [[ "$1" =~ $mmm ]] ; then
target="$1"
precisehit=0
shift
elif [[ "${1::-1}" =~ $mmm ]] && [[ "${1: -1}" == "!" ]] ; then
target="${1::-1}"
precisehit=1
shift
fi
n=5
command="$@"
before="$(echo "$command" | /bin/bash | head -1 | tr -dc 0-9.- | cut -d . -f 1)"
[ "$before" == "" ] && before=0
started="$before"
while true; do
echo ... measuring ${n}s ...
sleep $n
after="$(echo "$command" | /bin/bash | head -1 | tr -dc 0-9.- | cut -d . -f 1)"
[ "$after" == "" ] && after=0
clear
difference=$(( $after - $before ))
speed=$((100000 * $difference*$scale/$n ))
printf %+.2f\ items/"$scaletext"\\n "$((speed))e-5"
[ "$difference" -gt "$target" ] && [ "$speed" -lt 0 ] && remaining="NONE"
remaining=$(( $target - $after ))
if [ "$speed" -eq 0 ]; then
eta="NONE"
else
eta=$(( 100000 * 10 * $remaining / $speed ))
[ "$eta" -lt 0 ] && eta="NONE"
fi
[ "$difference" -lt 0 ] && difference=$(( -($difference) ))
if [ "$difference" -ne 0 ]; then #if there is no change we dont know if its slow or not
if [ "$difference" -le 20 ]; then #these numbers ...
n=$((n+5))
elif [ "$difference" -gt 40 ]; then # .. will need some math
n=$((n-1))
[ "$n" -le 0 ] && n=1
fi
fi
[ "$speed" -lt 0 ] && remaining=$(( -($remaining) ))
echo Items: $after/$target
if [ "$speed" -ne 0 ]; then
echo -n "To go: $remaining items, "
if [ "$eta" == "NONE" ]; then
echo - $scaletext
else
printf %.1f\ "$scaletext"\\n "$((eta))e-1"
fi
else
echo To go: -stalled-
fi
# echo Started with: $started
if [ "$remaining" -eq 0 ]; then
echo
echo Exact target reached.
exit 0
fi
if [ "$remaining" -le 0 -a "$precisehit" == "0" -a "$speed" -ne 0 ]; then
echo
echo Target reached.
exit 0
fi
before="$after"
done