Portál AbcLinuxu, 10. února 2026 19:35
dcopRef=`kdialog --progressbar "Press Cancel at Any time" 4`
dcop $dcopRef showCancelButton true
# Testovací smyčka
while true; do
sleep 1
[ `dcop $dcopRef wasCancelled` == "true" ] && echo konec
done
# Hlavní funkce
dcop $dcopRef setProgress 1
dcop $dcopRef setLabel "Thinking really hard"
sleep 50
dcop $dcopRef setProgress 2
sleep 50
dcop $dcopRef setLabel "Thinking some more"
dcop $dcopRef setProgress 3
sleep 50
dcop $dcopRef setProgress 4
sleep 50
dcop $dcopRef close
exitHlavní funkce by měla normálně probíhat, ta smyčka by jen měla hlídat stisk ukončovacího tlačítka a zavolat vypínací funkci. Teď se pochopitelně rozjede jen ta smyčka. Lze nějak učinit, aby běžely současně testovací smyčka i hlavní program?
prikaz1 &
{
prikaz2
prikaz3
} &
prikaz4
Příkaz1 a příkaz2,3 budou bězět na pozadí při současném běhu skriptu (prikazu4 atd.).
break.
function k_dcop()
{
echo konec
dc_1=0
dcop $dcopRef close
}
dcopRef=`kdialog --progressbar "Press Cancel at Any time" 4`
dcop $dcopRef showCancelButton true
dc_1=1
until [ $dc_1 -eq 0 ]; do
sleep 1
[ `dcop $dcopRef wasCancelled` == true ] && k_dcop
done &
dcop $dcopRef setProgress 1
dcop $dcopRef setLabel "Thinking really hard"
sleep 5
dcop $dcopRef setProgress 2
sleep 5
dcop $dcopRef setLabel "Thinking some more"
dcop $dcopRef setProgress 3
sleep 5
dcop $dcopRef setProgress 4
sleep 5
dcop $dcopRef close
exitKdyž stisknu ukončovací tlačítko v progressbaru, toto zmizí, ale script dál běží až do konce (což je nepřijatelné, půjde o mencoder, a to jsou hodiny).
mircy@linux:/data/video-avi> sh e.sh konec object not accessible object not accessible object not accessible call failed mircy@linux:/data/video-avi>A když ho nestisknu,tak po doběhnutí skriptu donekonečna:
e.sh: line 19: [: ==: unary operator expected call failed e.sh: line 19: [: ==: unary operator expected call failed e.sh: line 19: [: ==: unary operator expected call failed e.sh: line 19: [: ==: unary operator expected call failedOmluvte mé pomalé psaní, jsem postižený.
dc_1=1 until [ $dc_1 -eq 0 ]; do sleep 1 [ `dcop $dcopRef wasCancelled` == true ] && k_dcop done &tak tu část zkus upravit takhle :
dc_1=1
{
until [ $dc_1 -eq 0 ]; do
sleep 1
[ `dcop $dcopRef wasCancelled` == true ] && k_dcop
done
exit
} &
... atd.
a nebo takhle :
dc_1=1 until [ $dc_1 -eq 0 ]; do sleep 1 [ `dcop $dcopRef wasCancelled` == true ] && k_dcop done & [ "$dc_1" = "1" ] || exit ... atd.Pokud mysllíš něco jiného, napiš a já, nebo někdo jiný se více zamyslí ...
.
function k_dcop()
{
echo konec
dc_1=0
dcop $dcopRef close
exit
}
exit je na konci funkce. Tam asi nemá žádný význam, stejně tam funkce končí. Zkus ho dát, jak jsem psal tady, jestli je to co předpokládám, že potřebuješ.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.