Shell skripty jsou neuvěřitelně užitečné věci. Umožňují vám udělat něco tak základního, jako je vytvoření snadného příkazu, který nahradí obtížnější příkaz se spoustou příznaků, až po dávkování mnoha složitých příkazů ke spuštění z úlohy cron. Jsou skvělé, protože je můžete rychle odpálit ve svém oblíbeném terminálu, ale v některých případech vyžadují, abyste si pamatovali konkrétní kombinace vlajek nebo možností. Pokud se ocitnete v této situaci, můžete přidat několik jednoduchých dialogů GUI, které vám pomohou urychlit vaši cestu zadaným úkolem.
Abyste mohli využít tento tutoriál, budete potřebovat následující:
-
Přístup k unixovému shellu (toto je napsáno s ohledem na bash).
-
Operační systémy macOS a *nix (jako Linux) by měly být součástí tohoto nebo podobného.
-
Ve Windows můžete nainstalovat prostředí CygWin nebo v nejnovějších verzích Windows 10 použít "Windows Subsystem for Linux"
-
Základní knihovny pro desktopové prostředí KDE. Nepotřebujete celou věc, zvláště pokud již máte nainstalované jiné DE.
Instalace kdialog by měla být nutná pouze v případě, že jste začínali s desktopovým prostředím jiné než KDE a na vašem počítači nemáte žádné jiné aplikace KDE. Je součástí balíčku kde-baseapps-bin na Ubuntu, což znamená, že je standardně nainstalován na Kubuntu. Na jiných derivátech jej můžete nainstalovat pomocí následujícího příkazu na terminálu:
Instalace kdialog z terminálu.
sudo apt-get install kde-baseapps-bin
To pravděpodobně povede k rozsáhlé instalaci, protože spolu s ní budou nainstalovány i další knihovny a balíčky KDE. Ale hej, místo na pevném disku je levné, ne?
Vzhledem k tomu, že skripty mají (obecně) dělat věci automaticky, budeme muset tento dialog zobrazit pouze v následujících situacích:
-
Pokud potřebujeme zachytit nějaký druh vstupu od uživatele, nebo;
-
Pokud chceme uživateli ukázat nějakou zpětnou vazbu viditelným způsobem (tj. ne jen nějaký text vyplivnutý na příkazovém řádku).
Vezměme si příklad použití příkazu k [zálohování webu Drupal pomocí drush]. Samozřejmě, protože jste začínající internetový podnikatel, nemáte jen jeden web Drupal –? máš tři. Raději byste nemuseli spouštět samostatné příkazy, když chcete zálohovat všechny své weby, ale zároveň si nechcete pamatovat dlouhou cestu, pokud chcete pořídit snímek pouze jednoho. Můžeme si pomoci několika dialogy:
-
Předložit uživateli seznam webů, které můžeme zálohovat, a jako on si může vybrat, a;
-
Ukažte uživateli zprávu potvrzující výsledek, ať už jde o úspěch nebo neúspěch.
kDialog funguje tak, že jej volá na příkazovém řádku spolu s typem dialogu , všechny parametry, které typ může vyžadovat, a jakékoli další možnosti, jako je nadpis dialogu.
Existuje celá řada typů dialogů, ze kterých si můžete vybrat v závislosti na vašich potřebách:
Typ dialogu | Ukázkový obrázek | Popis |
---|---|---|
Informační schránky | ![]() | Zobrazí pole s tlačítkem „OK“, které se má zavřít, s textovou zprávou a ikonou „nekritických“ informací, varování nebo chyby. |
Pasivní vyskakovací okno | ![]() | Zobrazí se zpráva, která během několika sekund zmizí, tj. nevyžaduje, aby ji uživatel zavřel nebo zavřel. |
Ano/Ne schránka zpráv | ![]() | Stejně jako "Informační pole zpráv" se zde zobrazí dialogové okno s ikonou informací/varování/chyby, která uživateli také poskytne volbu "Ano" nebo "Ne." |
Vstupní dialogová okna | ![]() | To poskytuje jediné pole, do kterého může uživatel zadat nějaký text. |
Zobrazení souborů | ![]() | Tím se zobrazí obsah souboru (prostého textu) v dialogovém okně. |
Dialogová okna nabídky a výběru | ![]() | To poskytuje dialogové okno se seznamem položek, které uživateli umožňuje provést jeden nebo více výběrů:
|
Dialogová okna pro výběr souboru | ![]() | Uživatel si může vybrat část souborového systému, včetně:
|
Dialogy průběhu | ![]() | Uživatel může zkombinovat kDialog s příkazem dcop k vytvoření dialogu, který uživatele informuje o průběhu operace. |
Když se podíváte na výše uvedené možnosti, dvě z nich vyskočí jako potenciál:
-
„Dialogové okno kontrolního seznamu“ nám umožní vybrat jeden nebo všechny naše weby k zálohování.
-
"Information Message Box" lze použít k zobrazení toho, zda každá z nich byla úspěšná nebo neúspěšná.
Vzhledem k těmto možnostem si můžeme představit, že náš skript vypadá asi takto:
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.
S ohledem na to se pojďme ponořit přímo do toho.
První věc, kterou bychom měli udělat, je sestavit příkaz drush, který chceme použít na každé místo, když je vybráno. Předpokládejme, že všechny stránky jsou na stejném webovém hostiteli v různých adresářích, ale zálohy chceme uložit do společného adresáře „záložní“. Můžeme použít následující:
cd SITE
drush ard --destination=/home/user/backup/SITENAME.tar.gz
Takže s využitím vašich znalostí o nastavování proměnných a cyklů for můžeme vytvořit tento skript následovně:
#! /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
Pokud to uložíme a uděláme to, abychom to mohli spustit tak, jak je popsáno v prvním článku série Bash, budeme moci spustit jediný příkaz, získat snadno použitelný dialog pro výběr našeho webu a pak se podívat na pěkné okno s přehledem zpět, jak vše probíhalo.
I když lze tento skript jistě optimalizovat několika způsoby, ukazuje, jak můžete použít kdialog ke shromažďování některých uživatelských vstupů a zobrazení některých výsledků spuštěním jediného programu ve skriptu.