Добавление простого графического интерфейса в сценарии оболочки 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 работает, вызывая его в командной строке вместе с типом диалога, любыми параметрами, которые могут потребоваться для этого типа, и любыми другими параметрами, такими как заголовок диалога.
Существует большое разнообразие типов диалогов на выбор в зависимости от ваших потребностей, а именно:
Dialog Type | Sample Image | Description |
---|---|---|
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:
| |
File Selection Dialog Boxes |
The user can select part of the filesystem, including:
| |
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 для сбора некоторого пользовательского ввода и отображения некоторых результатов, запустив одну программу в вашем сценарии.