Как работает кнопка отмены в диалоге прогресса Zenity?

Пытаясь заставить кнопку Cancel на окне Zenity --progress работать для моих скриптов, я понял, что не понимаю, как вообще работает кнопка Cancel в примере, приведенном на странице руководства Zenity: https://help.gnome.org/users/zenity/stable/progress.html.en

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

Когда этот скрипт выполняется, почему процесс останавливается, когда нажимается кнопка Cancel, когда не видно ни exit, ни break, ни какой-либо другой команды?

Я думал, что Zenity - это просто программа для отображения графических интерфейсов и возврата кодов выхода, которые могут быть использованы для запуска нужных команд (например, exit при отмене и т.д.), но похоже, что Zenity должен делать что-то гораздо более сложное, потому что нет никаких причин для того, чтобы команды в примере действительно останавливались при нажатии кнопки.

Zenity делает что-то более сложное, или я что-то неправильно понимаю? Я новичок в написании сценариев на bash/sh, поэтому кажется, что я, вероятно, что-то недопонимаю. Если это просто сложная функция, уникальная для Zenity, то полное техническое описание того, как она работает, не нужно; просто достаточно объяснения, чтобы ее можно было надежно использовать - вот что я хотел бы получить. Спасибо.

(Я хотел бы также спросить, почему этот пример из официального руководства на самом деле не работает [на Ubuntu 14.04], потому что ни одно --error окно Zenity не отображается, но я не думаю, что StackExchange любит совместные вопросы, так что не обращайте внимания, если это не связано с тем, как я могу быть неправильно понят)

Related post: Terminate script using zenity progress bar (не отвечает на мой вопрос, потому что в верхнем ответе сказано использовать --auto-kill, когда в этом примере процесс отменяется без использования --auto-kill

0
07.02.2016, 20:46
0 ответов

Теги

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