Gli script di shell sono cose incredibilmente utili. Ti consentono di fare qualcosa di semplice come creare un comando facile per sostituire uno più difficile con molti flag, per raggruppare molti comandi complessi da eseguire da un lavoro cron. Sono fantastici perché puoi attivarli rapidamente nel tuo terminale preferito, ma in alcuni casi richiedono che tu ricordi combinazioni specifiche di flag o opzioni. Se ti trovi in questa situazione, puoi aggiungere alcune semplici finestre di dialogo della GUI per aiutarti a velocizzare l'esecuzione dell'attività in corso.
Per utilizzare questo tutorial, avrai bisogno di quanto segue:
-
Accesso a una shell simile a Unix (questo è scritto pensando a bash).
-
macOS e *nix OS (come Linux) dovrebbero avere questo o uno simile.
-
Su Windows, puoi installare l'ambiente CygWin, oppure su versioni recenti di Windows 10 utilizzare il "Sottosistema Windows per Linux"
-
Le librerie di base per l'ambiente desktop KDE. Non hai bisogno dell'intera cosa, soprattutto se hai già installato un altro DE.
L'installazione di kdialog dovrebbe essere necessaria solo se hai iniziato con un ambiente desktop altro di KDE e non hai altre applicazioni KDE sulla tua macchina. Fa parte del pacchetto kde-baseapps-bin su Ubuntu, il che significa che è installato di default su Kubuntu. Su altri derivati, puoi installarlo con il seguente comando al terminale:
Installazione di kdialog dal terminale.
sudo apt-get install kde-baseapps-bin
Ciò risulterà probabilmente in un'installazione considerevole, poiché altre librerie e pacchetti di KDE verranno installati insieme ad esso. Ma ehi, lo spazio sul disco rigido è poco, giusto?
Poiché gli script dovrebbero (in generale) fare le cose automaticamente, dovremo mostrare questa finestra di dialogo solo nelle seguenti situazioni:
-
Se abbiamo bisogno di acquisire una sorta di input dall'utente, oppure;
-
Se vogliamo mostrare all'utente una sorta di feedback in modo evidente (cioè non solo del testo sputato sulla riga di comando).
Prendiamo l'esempio dell'uso di un comando per [fare il backup del tuo sito Drupal usando drush]. Naturalmente, dal momento che sei un imprenditore di Internet in erba, non hai solo un sito Drupal? ne hai tre. Preferiresti non dover eseguire comandi separati quando desideri eseguire il backup di tutti i tuoi siti, ma allo stesso tempo non vuoi dover ricordare un lungo percorso se vuoi scattare un'istantanea di uno solo. Possiamo usare un paio di dialoghi per aiutarci:
-
Presentare all'utente un elenco di siti di cui possiamo eseguire il backup, e come lei per fare una scelta, e;
-
Mostra all'utente un messaggio di conferma del risultato, che si tratti di un successo o di un fallimento.
kDialog funziona chiamandolo dalla riga di comando insieme a un tipo di dialogo , tutti i parametri che il tipo potrebbe richiedere e qualsiasi altra opzione come il titolo di una finestra di dialogo.
È disponibile una buona varietà di tipi di finestre di dialogo tra cui scegliere in base alle proprie esigenze, come segue:
Tipo di dialogo | Immagine campione | Descrizione |
---|---|---|
Caselle dei messaggi informativi | Visualizza una casella con un pulsante "OK" per chiudere, fornendo un messaggio di testo e un'informazione "non critica", un avviso o un'icona di errore. | |
Pop-up passivo | Viene visualizzato un messaggio che scompare entro pochi secondi, ovvero non richiede all'utente di chiuderlo o ignorarlo. | |
Sì/No Casella di messaggio | Come le "Finestre dei messaggi di informazioni", viene visualizzata una finestra di dialogo con un'icona di informazioni/avviso/errore che fornirà anche la selezione dell'utente di "Sì" o "No". | |
Finestre di dialogo di immissione | Ciò fornisce una singola casella in cui l'utente può digitare del testo. | |
Caselle di visualizzazione dei file | Verrà visualizzato il contenuto di un file (di testo normale) all'interno di una finestra di dialogo. | |
Menu e finestre di dialogo di selezione | Ciò fornisce una finestra di dialogo con un elenco di elementi, consentendo all'utente di effettuare una o più selezioni:
| |
Finestre di dialogo per la selezione dei file | L'utente può selezionare parte del filesystem, tra cui:
| |
Finestre di avanzamento | L'utente può combinare kDialog con il comando dcop per creare una finestra di dialogo che aggiorna l'utente sullo stato di avanzamento di un'operazione. |
Esaminando le opzioni di cui sopra, due di esse saltano fuori come dotate di potenziale:
-
La "finestra di dialogo dell'elenco di controllo" ci consentirà di selezionare uno o tutti i nostri siti di cui eseguire il backup.
-
La "Casella dei messaggi informativi" può essere utilizzata per visualizzare se ognuno di questi è riuscito o meno.
Date queste opzioni, possiamo immaginare che il nostro script sia simile a questo:
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.
Con questo in mente, tuffiamoci subito.
La prima cosa che dovremmo fare è assemblare il comando drush che vogliamo applicare a ciascun sito quando viene selezionato. Supponiamo che tutti i siti si trovino sullo stesso host web in directory diverse, ma vogliamo archiviare i backup in una directory di "backup" comune. Possiamo usare quanto segue:
cd SITE
drush ard --destination=/home/user/backup/SITENAME.tar.gz
Quindi, usando la tua conoscenza dell'impostazione delle variabili e dei cicli for, possiamo creare questo script come segue:
#! /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
Se salviamo questo e facciamo in modo che possiamo eseguirlo come descritto nel primo articolo della serie Bash saremo in grado di eseguire un singolo comando, ottenere una finestra di dialogo facile da usare per scegliere il nostro sito, quindi vedere una bella finestra di segnalazione torna come è andato tutto.
Sebbene questo script possa certamente essere ottimizzato in un paio di modi, mostra come puoi usare kdialog per raccogliere alcuni input dell'utente e visualizzare alcuni risultati eseguendo un singolo programma all'interno del tuo script.