Дизайн, который вы используете, кажется мне излишне хитрым. Вы можете рассмотреть следующий вариант:
#!/bin/bash
LOG=logfile.log
#echo $i #what's this for?
exec 3>&1
exec 1> "$LOG" # logfile.log contains all what will be printed in terminal and it will keep updating its content till the script finish it is job
#command1 &
sleep 5 &
sleep 10 &
sleep 15 &
for i in {1..7}; do
echo x
sleep 1
done &
#command2 &
#command3 &
#and so on...
exec 1>&3
exec 3>&-
echo Progress:
while [ $(jobs -pr | wc -l) -gt 0 ] ; do
#jobs
echo -n "."
sleep 1
done
echo -e "\nProcess is DONE ..." | tee -a "$LOG"
Добавлено несколько иллюстративных строк: