Como usar a barra de progresso kdialog de um script Bash quando a barra foi inicializada em outro script?

1

Aqui está um exemplo de como usar a barra de progresso do kdialog. Funciona.

dbusRef='kdialog --progressbar "Press Cancel at Any time" 10'
qdbus $dbusRef showCancelButton true

until test "true" = 'qdbus $dbusRef wasCancelled'; do
 sleep 1
 inc=$(('qdbus $dbusRef Get "" "value"' + 1))
 qdbus $dbusRef Set "" "value" $inc;
done

qdbus $dbusRef close

No entanto, não consigo descobrir como fazer isso funcionar quando o arquivo de script principal chama um segundo arquivo de script. Quero continuar atualizando a mesma barra de progresso do segundo script.

O erro é:

    Valor de
  • qdbus Set '' 53 Caminho '' não é um nome de caminho válido.

O código para atualizar a barra de progresso é exatamente o mesmo no segundo arquivo de script que o primeiro. Genericamente, é isso:

qdbus $dbusRef Set "" value "$PROGRESS"

Obviamente, alguns valores de variáveis não estão sendo transmitidos. Mas nenhum dos tutoriais que vi explica as variáveis. Por exemplo, o que é value ? O que é $dbusRef ?

Em resumo, como faço para atualizar a mesma barra de progresso de um segundo arquivo de script bash que é chamado pelo primeiro?

    
por MountainX 14.07.2013 / 00:49

1 resposta

2

Você esqueceu de postar os dois scripts. Mas, dada a sua descrição, parece que você está configurando a variável dbusRef em um script de shell e acessando-a em outro script. Isso não funciona porque cada shell tem seu próprio conjunto de variáveis. Você precisa passar a variável do script de chamada para o script chamado.

Uma maneira fácil de fazer isso é transformar a variável em uma variável de ambiente. Você faz isso com o export embutido. No chamador:

export dbusRef="$(kdialog --progressbar "Press Cancel at Any time" 10)"
…
some_other_program_that_happens_to_also_be_a_shell_script

No script chamado:

PROGRESS='something or other'
qdbus "$dbusRef" Set "" value "$PROGRESS"

Como alternativa, em vez de usar export , você pode usar qualquer método que desejar para passar as informações, como um argumento de linha de comando.

dbusRef="$(kdialog --progressbar "Press Cancel at Any time" 10)"
…
some_other_program_that_happens_to_also_be_a_shell_script argument1 argument2 "$dbusRef" argument4

e no script chamado:

PROGRESS='something or other'
qdbus "$3" Set "" value "$PROGRESS"
    
por 14.07.2013 / 01:45