Somebody on a thread in the (french) Mandriva Forum recently suggested a script, designed to provide a tool to display kind of "temporisation widgets" on the console (to be ultimately pasted in other more complex scripts).
One version of this script was something like the following, which seems to work fine (it displays a spinning cross and it end with just ONE ENTER keystroke) :
(sorry for not having translated comments from french)
#!/bin/bash
# Arr�t par cr�ation de fichier
# Version:1.0.2c
# Au choix: croix tournante ou barre d'avancement;
# inverser les commentaires pour s�lectionner la boucle du
# mode choisi. Pour arr�ter et revenir � l'invite : taper ENTREE.
#
#
clear;echo
#+++++++++++++++++++++++++++++++++++++++
# partie � ins�rer dans un script (supprimer la boucle superflue)
PID=$$ # PID du processus p�re
trap "rm -f $STOP; exit" HUP INT QUIT ABRT TERM
# Affiche la barre d'avancement (ici 5 motifs/s)
function barre()
{
tput civis;tput bold;tput sc;x=0
# Displays 5 sharps/seconds
#--------------------------
# COLS=$(tput cols) # M�morise la largeur du terminal
# while : ; do
# sleep 0.2
# tput rc;tput hpa $x;tput el
# echo -n "#"
# let "x += 1"
# if [ $x = $COLS ]; then tput rc;tput dl1;x=0;fi
# if [ -f "$STOP" ]; then break;fi
# if [ $((x % 5)) = 0 ]; then # si Ctrl-c a tu� le p�re, arr�te le fils
# if [ "$(ps h $PID)" = "" ]; then break;fi
# fi
# done
#--------------------------
# Displays spinning cross
#---------------------------------------
while : ; do
sleep 0.125;tput rc;tput dl1;echo -n " |"
sleep 0.125;tput rc;tput dl1;echo -n " /"
sleep 0.125;tput rc;tput dl1;echo -n " -"
sleep 0.125;tput rc;tput dl1;echo -n " \\"
sleep 0.125;tput rc;tput dl1;echo -n " |"
sleep 0.125;tput rc;tput dl1;echo -n " /"
sleep 0.125;tput rc;tput dl1;echo -n " -"
sleep 0.125;tput rc;tput dl1;echo -n " \\"
if [ -f $STOP ]; then break;fi
if [ "$(ps h $PID)" = "" ]; then break;fi
done
#---------------------------------------
rm -f $STOP
tput rc;tput dl1;tput sgr0;tput cnorm;tput ed
}
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# fin de la fonction pour un script
# Lancement de la fonction barre
barre &
# Instructions d'arr�t de la fonction
read
STOP=$(mktemp --suffix=.stop-barre --tmpdir=$HOME/tmp)
tput rc;tput dl1
sleep 1 # faire une pause pour revenir en avant-plan
# avant d'envoyer une commande d'avant plan.
exit 0
The problem is now for another version of this script, which is exactly the same with just some commented and uncommented lines, and which displays a line of sharps (#) (five # / second).
It works but - for some reason - it ends and returns to shell invite with TWO ENTER keystrokes.
#!/bin/bash
# Arr�t par cr�ation de fichier
# Version:1.0.2c
# Au choix: croix tournante ou barre d'avancement;
# inverser les commentaires pour s�lectionner la boucle du
# mode choisi. Pour arr�ter et revenir � l'invite : taper ENTREE.
#
#
clear;echo
#+++++++++++++++++++++++++++++++++++++++
# partie � ins�rer dans un script (supprimer la boucle superflue)
PID=$$ # PID du processus p�re
trap "rm -f $STOP; exit" HUP INT QUIT ABRT TERM
# Displays a bar (with sharps) or a cross
function barre()
{
tput civis;tput bold;tput sc;x=0
#--------------------------
COLS=$(tput cols) # M�morise la largeur du terminal
while : ; do
sleep 0.2
tput rc;tput hpa $x;tput el
echo -n "#"
let "x += 1"
if [ $x = $COLS ]; then tput rc;tput dl1;x=0;fi
if [ -f "$STOP" ]; then break;fi
if [ $((x % 5)) = 0 ]; then # si Ctrl-c a tu� le p�re, arr�te le fils
if [ "$(ps h $PID)" = "" ]; then break;fi
fi
done
#--------------------------
# Displays spinning cross
#---------------------------------------
# while : ; do
# sleep 0.125;tput rc;tput dl1;echo -n " |"
# sleep 0.125;tput rc;tput dl1;echo -n " /"
# sleep 0.125;tput rc;tput dl1;echo -n " -"
# sleep 0.125;tput rc;tput dl1;echo -n " \\"
# sleep 0.125;tput rc;tput dl1;echo -n " |"
# sleep 0.125;tput rc;tput dl1;echo -n " /"
# sleep 0.125;tput rc;tput dl1;echo -n " -"
# sleep 0.125;tput rc;tput dl1;echo -n " \\"
# if [ -f $STOP ]; then break;fi
# if [ "$(ps h $PID)" = "" ]; then break;fi
# done
#---------------------------------------
rm -f $STOP
tput rc;tput dl1;tput sgr0;tput cnorm;tput ed
}
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# fin de la fonction pour un script
# Lancement de la fonction barre
barre &
# Instructions d'arr�t de la fonction
read
STOP=$(mktemp --suffix=.stop-barre --tmpdir=$HOME/tmp)
tput rc;tput dl1
sleep 1 # faire une pause pour revenir en avant-plan
# avant d'envoyer une commande d'avant plan.
exit 0
Why such different behaviours ? And how to get the second version to end and go back to the shell prompt with just ONE (ENTER) keystroke.
---------- Post updated at 08:34 PM ---------- Previous update was at 08:28 PM ----------
For the french-speaking of you see the discussion about some aspects of this script :
http://forum.mandriva.com/fr/viewtopic.php?p=840962#p840962