Portál AbcLinuxu, 11. května 2025 09:55
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 HOTOVOKdyž 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.