Пытаясь заставить кнопку 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