64 lines
1.8 KiB
Bash
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
|
|
}
|