Como fazer uma barra de progresso funcionar no Zenity?

2

Estou escrevendo um script básico simples (começando com #! /bin/bash , o formato do arquivo é .sh ) e estou tentando fazer uma barra de progresso funcionar:

#!/bin/bash  
echo "You are running in LXDE mode. Answer 'yes' or 'no' on the following question to continue (or not) in LXDE mode."
zenity --question --text='Do you want to continue in LXDE mode?' --ok-label=Yes --cancel-label=No
echo "Please enter your username and password to continue because the following command needs root privileges."
zenity --password --username
echo "Please enter today's date:"
zenity --calendar --text="Please enter today's date:"
echo "Please enter your name:"
zenity --entry --text='Please enter your name on the text entry below:'
echo "Analyzing data..."
zenity --info --text='Now begin analyzing data. If it takes more than 40 seconds, click on "Cancel".'
zenity --progress --title='Analyzing data...' --pulsate

Eu tentei passar de 0% para 100% e nada aconteceu. Foi preso em 0%. Eu também tentei fazer isso pulsar usando a opção --pulsate , ainda a 0% sem fazer nada.

Alguém por favor pode me ajudar? Qualquer ajuda seria apreciada.

    
por Bajiru 01.07.2017 / 15:43

2 respostas

4

Os documentos do Zenity têm um pequeno snippet de código que deve fazer exatamente o que você está procurando por.

#!/bin/sh
(
echo "10" ; sleep 1
echo "# Updating mail logs" ; sleep 1
echo "20" ; sleep 1
echo "# Resetting cron jobs" ; sleep 1
echo "50" ; sleep 1
echo "This line will just be ignored" ; sleep 1
echo "75" ; sleep 1
echo "# Rebooting system" ; sleep 1
echo "100" ; sleep 1
) |
zenity --progress \
  --title="Update System Logs" \
  --text="Scanning mail logs..." \
  --percentage=0

if [ "$?" = -1 ] ; then
        zenity --error \
          --text="Update canceled."
fi

Primeiro, tente copiar o código que está lá e executá-lo e confirme se ele funciona conforme o planejado. Em seguida, modifique para adicionar seu código, quando apropriado.

Se sua barra de progresso estiver travada em zero, certifique-se de ignorar quaisquer seções do script que possam estar pendentes e fazer você pensar que está realmente funcionando!

Editar: Conforme indicado na resposta abaixo, o motivo pelo qual não está funcionando é porque o zenity espera que o progresso seja repetido, como no exemplo de código.

    
por Bujiraso 01.07.2017 / 16:36
2

A maneira como zenity funciona para exibir as barras de progresso está capturando seus comandos echo do script bash por meio do comando de redirecionamento | (canal) (símbolo).

Aqui está um exemplo que você pode experimentar que eu tirei dos Fóruns do Ubuntu :

#!/bin/bash

# Force Zenity Status message box to always be on top.


(
# =================================================================
echo "# Running First Task." ; sleep 2
# Command for first task goes on this line.

# =================================================================
echo "25"
echo "# Running Second Task." ; sleep 2
# Command for second task goes on this line.

# =================================================================
echo "50"
echo "# Running Third Task." ; sleep 2
# Command for third task goes on this line.

# =================================================================
echo "75"
echo "# Running Fourth Task." ; sleep 2
# Command for fourth task goes on this line.


# =================================================================
echo "99"
echo "# Running Fifth Task." ; sleep 2
# Command for fifth task goes on this line.

# =================================================================
echo "# All finished." ; sleep 2
echo "100"


) |
zenity --progress \
  --title="Progress Status" \
  --text="First Task." \
  --percentage=0 \
  --auto-close \
  --auto-kill

(( $? != 0 )) && zenity --error --text="Error in zenity command."

exit 0

Se você seguir o link para Fóruns do Ubuntu , poderá ler uma discussão sobre esse script. Se depois disso você ainda tiver dúvidas, por favor, pergunte via comentário abaixo e eu farei o meu melhor para respondê-las por você.

    
por WinEunuuchs2Unix 07.07.2017 / 04:00