Script de démonstartion d'une barre de progression utilisant ZENITY pour tracker la progression des tâches lancées en arrière plan.
#! /usr/bin/env bash
if [ -t 0 ] ; then
DIALOG=${DIALOG=dialog}
else
DIALOG=${DIALOG=gdialog}
fi
fichtemp2=`tempfile 2>/dev/null` || fichtemp2=/tmp/test2$$
trap "rm -f $fichtemp2" 0 1 2 5 15
[ -n "$DEBUG" ] && set -x
not_staged_pattern="Changes not staged for commit"
untracked_pattern="Untracked files:"
commit_pattern="Changes to be committed:"
committed_patern="(.*) file changed, (.*) insertions\(+\), (.*) deletions\(-\)"
TASK[0]=0
export TASK
task1() {
folder=$1
pfile="/tmp/tasks_procfile"
echo {1..3} >$pfile
#tache 1: S'il des modif unstagged ou s'il existe des fichiers untracked on fait un git add -A
#
(
filep="/tmp/task1_progress"
git_status="$(LANG=en_US git -C $folder commit 2> /dev/null)"
i=1
if [[ ${git_status} =~ ${not_staged_pattern} || ${git_status} =~ ${untracked_patternn} ]] ; then
cmd=($(cat /tmp/task1_libelle))
LANG=en_US "${cmd[@]}" &
PROC_ID=$!
wait ${PROC_ID}
echo "$?" >$filep
else
echo 0 >$filep
fi
)
#tache 2: On refait un status
# S'il y a des changements à prendre en compte on fait un git commit
#
(
filep="/tmp/task2_progress"
git_status="$(LANG=en_US git -C $folder commit 2> /dev/null)"
if [[ ${git_status} =~ ${commit_pattern} ]] ; then
cmd=($(cat /tmp/task2_libelle))
LANG=en_US "${cmd[@]}" &
PROC_ID=$!
wait ${PROC_ID}
echo "$?" >$filep
fi
)
#tache 3: On refait un status
# S'il y a eu des changements on fait un push
#
(
filep="/tmp/task3_progress"
git_status="$(LANG=en_US git -C $folder commit 2> /dev/null)"
if [[ ${git_status} =~ ${commited_pattern} ]] ; then
cmd=($(cat /tmp/task3_libelle))
LANG=en_US "${cmd[@]}" &
PROC_ID=$!
wait ${PROC_ID}
echo "$?" >$filep
fi
)
}
progress-zenity () {
unset TIME_TO_FINISH PROGRESS STATUS
pfile="/tmp/tasks_procfile"
i=0
while /bin/true;
do
unset TASKS
TOTPR=0
IFS=' '
j=1
k=0
for i in `cat $pfile`; do (( k++ )) ; done
for i in `cat $pfile`;
do
LIBELLE[$i]=$(cat /tmp/task${i}_libelle)
STATUS[$i]=$(cat /tmp/task${i}_progress)
if [ ${STATUS[$i]} -ne 7 ] ; then
PROGRESS[$i]=100
TOTPR=$((TOTPR+PROGRESS[$i]/k))
j=$(( i + 1))
else
PROGRESS[$i]=0
TOTPR=$((TOTPR+PROGRESS[$i]/k))
fi
TASKS=$(cat /tmp/task${j}_libelle)
(
echo "${TOTPR}" ; sleep 1 # This command will echo a line begin with number "10". It will replace --percentage option.
echo "# ${TASKS}" ; sleep 1 # This command will echo a line begin with # character. It will replace --text option.
)
done
IFS=' '
# Create a list contain some commands
I=0
for a in `cat $pfile`; do [[ ${PROGRESS[$a]} -ge 100 ]] && I=$((I+1)); done
[[ $I -eq $i ]] && break
sleep 1
done
echo waiting
wait
}
#Initialisation des taches
rm /tmp/task*
echo 7 >"/tmp/task1_progress"
echo "git -C /data/espace-pro/workspace/git/kickstarts add -A" >"/tmp/task1_libelle"
echo 7 >"/tmp/task2_progress"
echo "echo \"on fait un commit\"" >"/tmp/task2_libelle"
echo 7 >"/tmp/task3_progress"
echo "echo \"on fait un push\"" >"/tmp/task3_libelle"
echo "Processus Terminé..." >"/tmp/task4_libelle"
task1 /data/espace-pro/workspace/git/kickstarts &
p
set +x