Как заставить прогресс-бар работать в Zenity?

Я пишу простой базовый сценарий bash (начиная с #! /bin/bash, формат файла - .sh) и пытаюсь заставить работать индикатор выполнения:

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

Я пытался сделать он сдвинулся с 0% до 100%, и ничего не произошло. Это застряло на 0%. Я также пытался заставить его пульсировать, используя опцию --pulsate, все еще на 0%, ничего не делая.

Может кто-нибудь помочь мне? Любая помощь будет оценена.

3
задан 7 July 2017 в 04:10

2 ответа

Документы Zenity имеют маленький фрагмент кода, который должен сделать точно, что Вы ищете.

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

Первая попытка, просто копируя в коде, который это там и выполнение его и подтверждая, что это работает, как предназначено, затем измените для добавления в коде в соответствующих случаях.

Если Ваш индикатор выполнения застревает в нуле, удостоверьтесь, что обошли любые разделы сценария, который может подвешивать и заставлять Вас думать, что он на самом деле работает!

Править: Как указано в Ответе ниже, причина, это не работает, состоит в том, потому что zenity ожидает, что прогресс будет отражен к нему, как в примере кода.

5
ответ дан 1 December 2019 в 13:23

Путь zenity работы для отображения индикаторов выполнения получают Ваш echo команды от Вашего bash сценарий через | (канал) команда перенаправления (символ).

Вот пример, можно попробовать это, я поднялся с Форумов 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

Если Вы переходите по ссылке к Форумам Ubuntu, можно считать обсуждение этого сценария. Если после этого у Вас все еще есть вопросы, спросите с помощью комментария ниже, и я приложу все усилия для ответа на них для Вас.

2
ответ дан 1 December 2019 в 13:23

Другие вопросы по тегам:

Похожие вопросы: