GNU/Linux >> Znalost Linux >  >> Linux

Přidání jednoduchého grafického rozhraní do skriptů prostředí Linux pomocí kdialogu

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:

kDialog Types
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ů:

  • Dialogy Menu a Radiolist umožňují výběr jedné možnosti.

  • Dialogové okno Checklist umožňuje výběr jedné, více nebo všech možností.

  • Dialogové okno Combobox umožňuje výběr jedné možnosti pomocí rozevírací nabídky.

Dialogová okna pro výběr souboru

Uživatel si může vybrat část souborového systému, včetně:

  • Vyberte existující soubory s možností filtrování podle názvu nebo typu souboru

  • Zadejte nový nebo nový soubor, který se má uložit/aktualizovat

  • Adresáře

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.


Linux
  1. Základy Linuxu:Jak stahovat soubory do prostředí pomocí Wget

  2. Nejjednodušší linuxové příkazy s 10 příklady

  3. Speciální parametry Bash vysvětlené pomocí 4 příkladů shellových skriptů

  1. Počítejte v linuxovém shellu s GNU bc

  2. Bash poziční parametry vysvětlené pomocí 2 příkladů shell skriptů

  3. Proč spouštět příkaz prostředí Linux s '&'?

  1. Jak analyzovat Json pomocí skriptování Shell v Linuxu?

  2. Jak mohu provést rozdělení s proměnnými v prostředí Linuxu?

  3. Jak se Linux vypořádává se skripty shellu?