LINUX.ORG.RU

[bash] Индийский код и dialog

 


0

1

Имеется такой вот индийский код

tempfile=/tmp/filttm
func_restart () {

{
i=0
echo "Выполняю:" > $tempfile
while [ "$i" -lt "100" ]; do
msg=`cat $tempfile`
sleep 0.25
echo $i
cat <<EOF
XXX
$msg
XXX
EOF
if [ "$i" == "0" ]; then
 /etc/init.d/squid stop >> $filetemp
elif [ "$i" == "50" ]; then
 /etc/init.d/squid start >> $filetemp
fi
let "i +=50"
done; echo '100'; sleep 1; } | dialog --title 'Work...' --gauge 'Gauge' 10 50 0
}

Оно не работает как хотелось

Чего хочется:

Хочется чтоб во время работы прогрессбара диалога оно выводило замесь «Gauge» Текст работы перезапуска сквида типа

Stopping Squid HTTP proxy: squid.
Starting Squid HTTP proxy: squid.

если делать так как выше то оно работает... только отображает после того как выполнило действие (Запуска\остановки squid) а не во время работы скрипта...

Хочется чтоб работа init скрипта выводилась наподобие как в консоль только в dialog... Такое реально сделать на bash ??

★★

Последнее исправление: Tok (всего исправлений: 1)

Наверное, что-то вроде этого:

#!/bin/sh

TFILE=`mktemp`

echo Action: > $TFILE
(/etc/init.d/squid stop ; /etc/init.d/squid start) >> $TFILE &
PID=$!
for P in `seq 0 100`
    do
    echo XXX
    cat $TFILE
    echo
    echo XXX
    if ps -p $PID > /dev/null
	then
	echo $P
	sleep 0.25
    else
	echo 100
	sleep 0.5
	break
	fi
    done | dialog --title 'Work...' --gauge 'Gauge' 10 50 0

rm $TFILE

cdslow ★★
()
Ответ на: комментарий от cdslow

Круто... то что надо... спасибо тебе за помощь ....

Tok ★★
() автор топика
Ответ на: комментарий от cdslow

Изучив код: Чёрт! я даже так бы и не додумался сделать... Спасибо ещё раз :)

Tok ★★
() автор топика
Ответ на: комментарий от cdslow

А такой вопрос.. а как оно понимает что справится за 100 циклов?.. откуда оно это знает ?

Tok ★★
() автор топика
Ответ на: комментарий от Tok

а как оно понимает что справится за 100 циклов?

Никак, ты должен подобрать задержку и количество циклов так, чтобы справилось.

В этом варианте 0.25*100 должно быть больше (с некоторым запасом), чем суммарное время на операции stop+start.

По хорошему, нужно добавить проверку: если операция не успела завершиться (процесс ещё жив), то либо вывести уведомление и дождаться окончания уже без индикатора, либо запустить ещё один цикл индикации.

Но мне лень :)

cdslow ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.