Поиск по сайту:

Добавление простого графического интерфейса в сценарии оболочки Linux с помощью kdialog


Shell-скрипты — невероятно полезная штука. Они позволяют вам сделать что-то простое, например, создать простую команду для замены более сложной с большим количеством флагов или объединить множество сложных команд для запуска из задания cron. Они хороши тем, что вы можете быстро активировать их в своем любимом терминале, но в некоторых случаях вам нужно запомнить определенные комбинации флагов или параметров. Если вы окажетесь в такой ситуации, вы можете добавить несколько простых диалоговых окон с графическим интерфейсом, которые помогут вам ускорить выполнение поставленной задачи.

Чтобы использовать этот учебник, вам понадобится следующее:

  • Доступ к Unix-подобной оболочке (это написано с учетом bash).
  • ОС macOS и *nix (например, Linux) должны поставляться с этой или подобной ей.
  • В Windows вы можете установить среду CygWin или в последних версиях Windows 10 использовать «Подсистему Windows для Linux».
  • Базовые библиотеки для среды рабочего стола KDE. Вам не нужно все это, особенно если у вас уже установлен другой DE.

Установка kdialog необходима только в том случае, если вы начали с рабочего стола, отличного от KDE, и на вашем компьютере нет других приложений KDE. Он является частью пакета kde-baseapps-bin в Ubuntu, что означает, что он установлен по умолчанию в Kubuntu. На других производных вы можете установить его с помощью следующей команды в терминале:

Установка kdialog из терминала.

sudo apt-get install kde-baseapps-bin

Это, вероятно, приведет к значительной установке, так как вместе с ней будут установлены другие библиотеки и пакеты KDE. Но эй, место на жестком диске дешевое, не так ли?

Так как скрипты (в общем) должны делать что-то автоматически, нам нужно показать это диалоговое окно только в следующих ситуациях:

  • Если нам нужно захватить какой-то ввод от пользователя или;
  • Если мы хотим показать пользователю какую-то обратную связь заметным образом (то есть не просто какой-то текст, выплюнутый в командной строке).

Давайте возьмем пример использования команды для [создания резервной копии вашего сайта Drupal с помощью drush]. Конечно, поскольку вы начинающий интернет-предприниматель, у вас есть не только один сайт на Drupal? у тебя три. Вам не нужно запускать отдельные команды, когда вы хотите сделать резервную копию всех своих сайтов, но в то же время вам не нужно запоминать длинный путь, если вы хотите сделать снимок только одного. Мы можем использовать пару диалогов, чтобы помочь себе:

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

kDialog работает, вызывая его в командной строке вместе с типом диалога, любыми параметрами, которые могут потребоваться для этого типа, и любыми другими параметрами, такими как заголовок диалога.

Существует большое разнообразие типов диалогов на выбор в зависимости от ваших потребностей, а именно:

kDialog Types
Dialog TypeSample ImageDescription

Information Message Boxes

Displays a box with an "OK" button to close, providing a text message and either a "non-critical" information, warning, or error icon.

Passive Pop-up

This displays a message that will disappear within a few seconds, i.e. it doesn’t require the user to close or dismiss it.

Yes/No Message Box

Like the "Information Message Boxes," this displays a dialog with an information/warning/error icon that will also provide the user’s selection of "Yes" or "No."

Input Dialog Boxes

This provides a single box into which the user can type some text.

File Display Boxes

This will display the contents of a (plain text) file within a dialog box.

Menu and Selection Dialog Boxes

This provides a dialog with a list of items, allowing the user to make one or more selections:

  • The Menu and Radiolist Dialogs allow selection of one option.

  • The Checklist Dialog allows selection of one, multiple, or all options.

  • The Combobox Dialog allows the selection of one option using a drop-down menu.

File Selection Dialog Boxes

The user can select part of the filesystem, including:

  • Select existing files, with the ability to filter by name or filetype

  • Enter a new of a new file to be saved/updated

  • Directories

Progress Dialogs

The user can combine kDialog with the dcop command to create a dialog that updates the user on the progress of an operation.

Глядя на вышеупомянутые варианты, два из них выскакивают как имеющие потенциал:

  • \Диалоговое окно контрольного списка\ позволит нам выбрать один или все наши сайты для резервного копирования.
  • Информационное окно сообщения может использоваться, чтобы показать, удалось ли каждому из них или потерпело неудачу.

Учитывая эти параметры, мы можем представить, что наш скрипт выглядит примерно так:

SITE1 is located HERE (make these full paths, not relative paths)
SITE2 is located THERE
SITE3 is located IN ANOTHER PLACE

display a kDialog with SITE1, SITE2, and SITE3 as options
    and tell me which one(s) the user picks

for each one the user picked:
    run +drush ard+ on that site, and
    record whether it was successful or not.

display another +kDialog+ with each of those results.

Имея это в виду, давайте погрузимся прямо в.

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

cd SITE
drush ard --destination=/home/user/backup/SITENAME.tar.gz

Итак, используя ваши знания о циклах for, мы можем сделать этот скрипт следующим образом:

#! /bin/bash

// Note: create variables to hold paths to all the sites
PERSONALSITE='/home/www/mypersonalsite/'
BUSINESSSITE='/home/www/mybusinesssite/'
HOBBYSITE='/home/www/myhobbysite/'

// Note: create variable to hold path to the destination
DESTINATION='/home/user/backup'

// Note: display a dialog asking the user to select which sites to back-up
CHOICES=$(kdialog --checklist "Select sites to back-up:" 1 "Personal site" off 2 "Business Site" off 3 "Hobby site" off)

// Note: log a success/failure message for each of the choices returned from dialog
for each in $CHOICES
do
    case {
        1)
            cd $PERSONALSITE
            drush ard --destination=$DESTINATION/mypersonalsite.tar.gz
            if [$?=="0"]
            then
                RESULTS += "Personal site backup: Succeeded\n"
            else
                RESULTS += "Personal site backup: Failed\n"
            fi
        2)
            cd $BUSINESSSITE
            drush ard --destination=$DESTINATION/mybusinesssite.tar.gz
            if [$?=="0"]
            then
                RESULTS += "Business site backup: Succeeded\n"
            else
                RESULTS += "Business site backup: Failed\n"
            fi
        3)
            cd $HOBBYSITE
            drush ard --destination=$DESTINATION/myhobbysite.tar.gz
            if [$?=="0"]
            then
                RESULTS += "Hobby site backup: Succeeded\n"
            else
                RESULTS += "Hobby site backup: Failed\n"
            fi
    esac

// NOTE: display a dialog with the results of all the backup operations.
kdialog --msgbox $RESULTS

Если мы сохраним это и запустим, мы сможем запустить его, как описано в первой статье серии Bash, мы сможем запустить одну команду, получить простой в использовании диалог для выбора нашего сайта, а затем увидеть красивое окно с отчетом. назад, как все прошло.

Хотя этот сценарий, безусловно, может быть оптимизирован несколькими способами, он демонстрирует, как вы можете использовать kdialog для сбора некоторого пользовательского ввода и отображения некоторых результатов, запустив одну программу в вашем сценарии.