PDA

Visualizza la versione completa : Script Bash


Neon87
01-10-2007, 12:45
Ciao...

Ho scritto un piccolo ciclo per generare una barra "pulsar" in modo che crei un attesa grafica all'utente... pero' da errore...




#!/bin/bash


function kbar() {

dcopRef=`kdialog --progressbar "Kerneler" 0`
dcop $dcopRef setLabel "$1"

while [ "bar" != "false" ]
do

sleep 1
setProgress=$((setProgress+10))

dcop $dcopRef setProgress $setProgress

done

}

function killkbar() {

bar=false;
dcop $dcopRef close

}


kbar &

sleep 5

killkbar



quando è dentro a kbar funziona e incrementa tutto perfettamente... poi passa a sleep per 5 secondi e quand è in killbar perde completamente i valori $bar e $dcopRef e quindi non riesce a chiudere la barra ...

Come posso fare a renderli "globali"?

giaros1
01-10-2007, 13:39
Per ciò che riguarda dcopRef la puoi dichiarare nel flusso principale e passarla come parametro alle due funzioni.

Invece per dbar non credo che si possa fare niente in quanto quando esegui l'istruzione "kbar &" stai avviando un nuovo processo e quindi non c'è più relazione tra le variabili nel tuo script e quelle del nuovo processo.


Non capisco perchè non fai così

<code>
function kbar() {

dcopRef=`kdialog --progressbar "Kerneler" 0`
dcop $dcopRef setLabel "$1"


while [ ("bar" != "false") -a ( $i -lt 5) ]
do

sleep 1
setProgress=$((setProgress+10))

dcop $dcopRef setProgress $setProgress

done

}</code>

giaros1
01-10-2007, 13:46
Per ciò che riguarda dcopRef la puoi dichiarare nel flusso principale e passarla come parametro alle due funzioni.

Invece per dbar non credo che si possa fare niente in quanto quando esegui l'istruzione "kbar &" stai avviando un nuovo processo e quindi non c'è più relazione tra le variabili nel tuo script e quelle del nuovo processo.


Non capisco perchè non fai così



function kbar() {

dcopRef=`kdialog --progressbar "Kerneler" 0`
dcop $dcopRef setLabel "$1"

i=0
while [ ("bar" != "false") -a ( $i -lt 5) ]
do

sleep 1
setProgress=$((setProgress+10))

dcop $dcopRef setProgress $setProgress

i=$((i+1))

done

}

Neon87
01-10-2007, 20:48
Il problema è che al posto di sleep 5 ci sono diversi comandi...
ed è necessario che stiano fuori in modo che quando finiscono chiuda la barra pulsar..

Allora faccio in modo di catturare il pid del nuovo flusso e di killarlo manualmente...

Se no altre idee?

Grazie dell'aiuto!

Loading