Jelenleg így írok egy bash forgatókönyvet:
foo(){
while true
do
sleep 10
done
}
bar(){
while true
do
sleep 20
done
}
foo &
bar &
wait
(Tudom, hogy nincs értelme egy ilyen forgatókönyvnek, csak a struktúráról szól)
Most hozzá akarok adni a jelkezelést a trap -- <doSomething> RTMIN+1
. Ez először működik. Amikor a szkript megkapja az rtmin 1 jelet, akkor megteszi a dolgot, de utána létezik (a 163 kilépési kóddal, amely a küldött jel száma).
Nem ezt a viselkedést akarom. Azt akarom, hogy a jel fogadása után a szkript továbbra is várja a folyamatok (ebben az esetben a két függvény) leállítását (ami természetesen ebben az esetben nem történik meg, de a szkriptnek várnia kell).
Kipróbáltam a hozzáadásával ; wait
azokhoz a dolgokhoz, amelyeket meg kell tenni a jel fogadásakor, de ez nem segít (vagy valami rosszat csinálok).
Tud valaki, hogyan érje el a kívánt viselkedést?
Előre köszönöm és legjobbakat kívánom.
SZERKESZTÉS: Talán egy pontosabb példa segít:
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
Most a RTMIN+2
A jelnek újra kell futtatnia a volume
funkció, de a clock
A folyamatot nem szabad megszakítani. (Mindeddig a teljes szkript (az összes alfolyamattal) a jel vételétől véget ér)