web-dev-qa-db-fra.com

Comment faire fonctionner une barre de progression dans Zenity?

J'écris un script bash de base simple (commençant par #! /bin/bash, le format de fichier est .sh) et j'essaie de faire fonctionner la barre de progression:

#!/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

J'ai essayé de le faire passer de 0% à 100%, et rien ne s'est passé. Il était bloqué à 0%. J'ai également essayé de le faire pulser en utilisant l'option --pulsate, toujours à 0%, sans rien faire.

Est-ce que quelqu'un peut m'aider s'il vous plait? Toute aide serait appréciée.

3
Bajiru

Les documents Zenity ont un petit extrait de code qui devrait faire exactement ce que vous cherchez.

#!/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

Commencez par copier le code existant, exécutez-le et vérifiez qu'il fonctionne comme prévu, puis modifiez-le pour ajouter votre code, le cas échéant.

Si votre barre de progression est bloquée à zéro, veillez à ignorer toutes les sections du script qui pourraient être suspendues et à vous faire penser que cela fonctionne réellement!

Edit: Comme indiqué dans la réponse ci-dessous, cela ne fonctionne pas parce que zenity s'attend à ce que les progrès lui soient répercutés, comme dans l'exemple de code.

5
Bujiraso

La façon dont zenity fonctionne pour afficher les barres de progression consiste à capturer vos commandes echo à partir de votre script bash via la commande de redirection (symbole) | (canal).

Voici un exemple que vous pouvez essayer et que j'ai tiré de Forums Ubunt :

#!/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

Si vous suivez le lien vers Forums Ubuntu , vous pourrez lire une discussion sur ce script. Si, après cela, vous avez encore des questions, posez vos questions via le commentaire ci-dessous et je ferai de mon mieux pour y répondre.

2
WinEunuuchs2Unix