nutools/legacy/sysinc/ewaitcmd.test

64 lines
1.8 KiB
Bash

# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
# ewaitcmd devait remplacer ewait, mais l'implémentation souffre de problèmes de
# synchronisation entre l'affichage et l'exécution de la commande. Le code est
# stocké dans ce fichier, en attendant de trouver une solution...
function __utools_eplus_file() {
# Afficher le nom d'un fichier à utiliser pour __utools_eplus()
local file="$TMPDIR/utools.$$.${utools_eplus_count_:=0}"
while [ -f "$file" ]; do
utools_eplus_count_=$(($utools_eplus_count_ + 1))
file="$TMPDIR/utools.$$.$utools_eplus_count_"
done
>"$file"
echo "$file"
}
function __utools_eplus() {
# Après un délai de 2 secondes, afficher un caractère "+" toutes les
# secondes, et ce tant que le fichier $1 existe
[ -f "$1" ] || return
sleep 2
while true; do
[ -f "$1" ] || break
echo_ "+"
sleep 1
done
}
function ewaitcmd() {
# Une étape d'une opération commencée par ebegin, matérialisée par des "+"
# qui s'affichent tant que le processus correspondant à la ligne de commande
# tourne.
# XXX problèmes: problèmes de synchronisme...
local eplus_file exitcode
if [ -n "$utools_edot_first_" ]; then
# au premier dot, afficher un espace d'abord
echo_ " "
utools_edot_first_=
fi
# commencer à afficher les "+"
eplus_file="$(__utools_eplus_file)"
__utools_eplus "$eplus_file" &
# lancer la commande
"$@"
exitcode=$?
# arrêter l'affichage des "+"
/bin/rm -f "$eplus_file"
if [ $exitcode -ne 0 ]; then
[ "$utools_ESTATUS_" -eq 0 ] && utools_ESTATUS_=$exitcode
echo_ "${COULEUR_ROUGE}x${COULEUR_NORMALE}"
else
echo_ "."
fi
return $exitcode
}