je suis en train d'écrire un script de bash comme celui-ci :
foo(){
while true
do
sleep 10
done
}
bar(){
while true
do
sleep 20
done
}
foo &
bar &
wait
(Je sais qu'un tel scénario ne sert à rien, il s'agit juste de la structure)
Maintenant, je veux ajouter le traitement du signal avec trap -- <doSomething> RTMIN+1
. Cela fonctionne dans un premier temps. Lorsque le script reçoit le signal rtmin 1, il fait quelque chose mais ensuite il existe (avec le code de sortie 163, qui est le numéro du signal envoyé).
Ce n'est pas le comportement que je veux. Je veux qu'après avoir reçu le signal, le script continue à attendre que les processus (dans ce cas les deux fonctions) se terminent (ce qui bien sûr ne se produira pas dans ce cas, mais le script devrait attendre).
J'ai essayé d'ajouter un ; wait
a aux choses à faire lors de la réception du signal, mais cela n'aide pas (ou alors je fais quelque chose de mal).
Quelqu'un sait-il comment obtenir le comportement souhaité ?
Merci d'avance et meilleurs vœux.
EDIT : Un exemple plus précis peut aider :
clock(){
local prefix=C
local interval=1
while true
do
printf ${prefix} $(date '+%d.%m %H:%M:%S')\n
sleep $interval
done
}
volume(){
prefix=V
volstat=$(amixer get Master 2>/dev/null)
echo $volstat | grep \[off\] >/dev/null && icon= #alternative: deaf: mute:
vol=$(echo $volstat | grep -o \[[0-9]\+%\] | sed s/[^0-9]*//g;1q)
if [ -z $icon ] ; then
if [ $vol -gt 50 ]; then
icon=
#elif [ $vol -gt 30 ]; then
# icon=
else
icon=
fi
fi
printf ${prefix}%s %3s%%\n $icon $vol
}
clock &
volume &
trap -- volume RTMIN+2
wait
Le RTMIN+2
signal doit maintenant relancer la volume
fonction, mais le clock
processus ne doit pas être interrompu. (Jusqu'à présent, le script entier (avec tous les sous-processus) est terminé à la réception du signal)