Portál AbcLinuxu, 3. listopadu 2025 03:25
function k_dcop()
{
echo konec
dc_1=0
dcop $dcopRef close
kill $$
}
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
echo HOTOVO
Když stisknu vypínací tlačítko na progressbaru, je to v pohodě:
mircy@linux:/data/video-avi> sh e.sh konec Ukončen (SIGTERM) mircy@linux:/data/video-avi>Ale když nechám vše doběhnout, tak se donekonečna opakuje:
call failed e.sh: line 17: [: ==: unary operator expected call failed e.sh: line 17: [: ==: unary operator expected call failed e.sh: line 17: [: ==: unary operator expected call failed e.sh: line 17: [: ==: unary operator expected call failed e.sh: line 17: [: ==: unary operator expected call failed e.sh: line 17: [: ==: unary operator expectedTedy ta smyčka na pozadí furt běží. A mně se nedaří ji po doběhnutí celé funkce vypnout. Jak na to? Kill $$ nezabírá.
killall jmeno_procesu ve vasem pripade asi killall -s KILL e.sh
[ `dcop $dcopRef wasCancelled` == true ] && k_dcop
[ x`dcop $dcopRef wasCancelled` != xfalse ] && k_dcop
dcop po zabiti daneho progressbaru nejspis nic nevypise takze se dana podminka expanduje na [ == true ] coz je spatne
[ `dcop $dcopRef wasCancelled` == true ] && k_dcopna
[ "$(dcop $dcopRef wasCancelled)" == true ] && k_dcop
e.sh: line 17: [: ==: unary operator expected se stejne nevyhnete
david@amd64 ~ $ [ "" == true ] david@amd64 ~ $ echo $? 1
MYPPID=$$
(while kill -0 $MYPPID; do sleep 1; if [...]; done) &
kill %1?
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.