Whiptail Integrare dialogo negli script shell

Create GUI Dialog Boxes In Bash Scripts With Whiptail

Whiptail possibilità di creare script di shell sicuri è essenziale non solo per gli amministratori di sistema, ma anche per gli utenti che desiderano automatizzare le attività ripetitive. A volte, dai nostri script di shell, abbiamo bisogno di fornire all’utente qualche tipo di informazione, chiedergli di fornire qualche input, scegliere tra una serie di alternative, o semplicemente chiedere la sua conferma prima di eseguire un’operazione potenzialmente pericolosa. Tutte queste azioni possono essere eseguite dalla riga di comando, ma per rendere i nostri script più intuitivi, possiamo utilizzare Whiptail per personalizzare e visualizzare i widget testuali.

In questo articolo vediamo come possiamo rendere i nostri script più user-friendly utilizzando widget testuali creati con Whiptail

In questo tutorial imparerai :

  • installare whiptail e la libreria newt in alcune delle distribuzioni Linux più utilizzate
  • utilizzare whiptail per produrre widget testuali dell’interfaccia utente dai nostri script di shell
  • utilizzare il widget della casella dei messaggi per visualizzare un messaggio semplice
  • utilizzare il widget yesno per consentire all’utente di eseguire una scelta binaria
  • ottenere l’input dell’utente con i widget di inputbox e passwordbox
  • creare menu con i widget menu e checklist

Installazione

Whiptail e la libreria “newt” sono software gratuiti e open source. Analogamente a dialog e alla libreria ncurses , possono essere utilizzati per visualizzare widget testuali da script di shell. Whiptail è disponibile nei repository di tutte le distribuzioni GNU/Linux più utilizzate. Per installarlo su Fedora, possiamo eseguire:

Terminale

sudo dnf installa newt

Su Debian e altre distribuzioni GNU/Linux basate su Debian, invece, installiamo whiptail direttamente il pacchetto. Possiamo farlo usando apt:

Terminale

sudo apt install whiptail

Su Archlinux, invece, per ottenere Whiptail è necessario installare il pacchetto libnewt che fa parte del repository “Community”. Eseguiamo l’installazione utilizzando il gestore pacchetti pacman:

Terminale

sudo pacman -Sy libnewt

Utilizzare Whistail per visualizzare i widget

Possiamo usare Whiptail per rendere I nostri script di shell interattivi più facili da usare. Vediamo qualche esempio del suo utilizzo.

Visualizzazione di un semplice messaggio

Nel nostro primo esempio, dimostriamo come utilizzare Whiptail per visualizzare un semplice messaggio all’utente. Per fare ciò, lanciamo il comando con l’ opzione –msbox. Come argomenti del comando, forniamo:

Il testo da mostrare all’utente
L’altezza del widget (espressa in righe)
La larghezza del widget (espressa in colonne)

Terminale

whiptail --msgbox "Questo è un semplice messaggio!" 10 30
whiptail

Ecco il widget prodotto dal comando:

Visualizzazione di una finestra di dialogo sì/no

Per visualizzare una sorta di messaggio a un utente e consentirgli di eseguire una semplice scelta “binaria”, possiamo avviare whiptail con il flag –yesno. Gli argomenti che dobbiamo fornire sono gli stessi che abbiamo usato nell’esempio precedente. Qui creiamo una finestra di dialogo che possiamo usare per chiedere la conferma dell’utente:

Terminale

whiptail --yesno "Sei sicuro di voler eseguire l'azione?" 10 30

Ecco l’output prodotto dal comando:

whiptail 2

Possiamo determinare la scelta scelta dall’utente controllando il codice di uscita del comando memorizzato nella variabile di shell: $? lo sarà 0 se viene selezionata la risposta affermativa, 1 altrimenti.

Chiedere input

Nell’esempio precedente abbiamo utilizzato il widget “yesno” per chiedere all’utente di eseguire una scelta binaria. In determinate situazioni, potrebbe essere necessario chiedere all’utente di fornire un input più generico sotto forma di stringa. Supponiamo, ad esempio, di voler chiedere all’utente di fornire un “nome utente”. Per eseguire questo compito, lanciamo Whiptail con l’opzione –inputbox. Gli argomenti che dobbiamo fornire sono gli stessi che abbiamo visto negli esempi precedenti, più uno opzionale [init]: possiamo usarlo per specificare un “segnaposto” per l’input. Ecco un esempio:

Terminale

whiptail --inputbox "Qual è il tuo nome utente?" 10 30 "radice"

Il comando genera la seguente finestra di dialogo:

whiptail 3

Come recuperare o memorizzare l’input dell’utente? Se l’utente preme “Ok”, l’input fornito viene stampato in standard error. Supponendo di voler “memorizzare” l’input in una variabile, eseguiremmo:

Terminale

username="$(whiptail --inputbox "Qual è il tuo nome utente?" 10 30 "root" 3>&1 1>&2 2>&3)"

Cosa sono tutti quei reindirizzamenti alla fine del comando? Come sappiamo, ci sono 3 descrittori di file usati dalla shell: standard input (0), standard output (1) e standard error (2). Whiptail utilizza il descrittore di file di standard output per visualizzare i widget e, come già detto, stampa l’input dell’utente su standard error. Quando utilizziamo il meccanismo di sostituzione dei comandi, un comando viene sostituito dal suo output, che è ciò che di solito memorizziamo in una variabile. In questo caso, tuttavia, ciò che vogliamo memorizzare nella variabile è lo standard error prodotto dal comando, quindi è necessario scambiare lo standard output e lo standard error per raggiungere il nostro obiettivo. Come possiamo farlo?

Quando eseguiamo un reindirizzamento, duplichiamo un descrittore di file in un altro. Ad esempio, se scriviamo:

Terminale

1>&2

Quello che stiamo dicendo è: “usa un duplicato del descrittore di file di standard error (2) per lo standard output”. Per scambiare i descrittori di file di standard output e di standard error, quindi possiamo scrivere:

Terminale

3>&1 1>&2 2>&3

Con quei reindirizzamenti:

Duplica il descrittore di file 1 (standard output) nel descrittore di file 3
Descrittore di file duplicato 2 (standard error) in descrittore di file 1 (standard output)
Descrittore di file duplicato 3 (che, nel primo passaggio abbiamo creato un duplicato dello standard output originale) nel descrittore di file 2 (standard error)

In altre parole, abbiamo semplicemente scambiato lo standard error e lo standard output. Abbiamo utilizzato un descrittore di file aggiuntivo (3) come “posto temporaneo” per memorizzare lo standard output originale, che altrimenti andrebbe perso. A questo punto la stringa inserita come input dall’utente viene stampata sullo standard output e, poiché abbiamo utilizzato la sostituzione dei comandi, viene “memorizzata” nella variabile “nome utente”:

Terminale

eco $nome utente
radice

Richiedere all’utente di inserire una password

La finestra di dialogo “password” funziona in modo simile a quella di “input”: l’unica differenza è che i caratteri inseriti dall’utente non vengono visualizzati durante la digitazione, per motivi di sicurezza. Per creare una finestra di dialogo per la password, lanciamo Whiptail con l’opzione –passwordbox.

Qui, proprio come abbiamo fatto nell’esempio precedente, memorizziamo l’input in una variabile:

Terminale

password="$(whiptail --passwordbox "Inserisci la tua password:" 10 30 3>&1 1>&2 2>&3)"

Il widget generato dal comando:

whiptail

Visualizzazione di un menu

La casella del menu viene creata avviando Whistail con l’opzione –menu e può essere utilizzata per presentare all’utente la scelta di una voce tra un elenco di alternative. Come argomenti per l’opzione forniamo i soliti argomenti più la coppia menu-height e una tag/item per ogni scelta che vogliamo includere nel menu. Il “tag” rappresenta il nome della scelta, l’”oggetto” ne è la descrizione. Ecco un esempio:

Terminale

whiptail
–menu “Qual è la tua shell preferita?” 10 35 2
“Bash” “(Bourne Again shell)”
“Zsh” “(Z-Shell)”

Ecco il risultato del comando:

whiptail

L’utente può navigare nel menu utilizzando i tasti SU e GIÙ. La voce che seleziona viene stampata sul descrittore di errore standard, una volta premuto <Ok>.

Consentire all’utente di selezionare più di una scelta

Quando viene utilizzato il widget “menu”, l’utente può selezionare solo una voce di quelle fornite. Se vogliamo consentire selezioni multiple, dobbiamo utilizzare il widget “lista di controllo”. Possiamo generarlo avviando Whiptail con l’opzione –checklist. La sintassi che dobbiamo usare è simile a quella di –menu, tranne per il fatto che per ogni scelta dobbiamo specificare lo stato della checkbox, come puoi vedere nel seguente esempio:

Terminale

whiptail 
--checklist "Qual è la tua shell preferita?" 10 40 3 
"Bash" "(Bourne Again shell)" 1 
"Zsh" "(Z-Shell)" 0 
"Dash" "(Dash shell)" 0

Come puoi vedere, per ogni voce di menu abbiamo fornito:

whiptail

Un tag
Una descrizione
Lo stato della casella di controllo: qui 0 e 1 indicano rispettivamente selezionato e deselezionato

L’utente può navigare con i tasti SU e GIÙ attraverso il menu e selezionare/deselezionare le voci con il tasto SPAZIO. Le scelte selezionate vengono stampate, separate da spazi, con errore standard, come al solito.

Conclusioni

In questo tutorial abbiamo visto come installare Whiptail su alcune delle distribuzioni GNU/Linux più utilizzate e abbiamo imparato come usarlo per visualizzare i widget testuali dell’interfaccia utente dai nostri script di shell. Abbiamo creato alcuni widget di input e abbiamo imparato come recuperare e memorizzare le scelte dell’utente. Qui abbiamo appena scalfito la superficie di ciò che possiamo fare con Whiptail; puoi saperne di più leggendo il manuale.


Grazie! per l’utilizzo della Guida di Linuxiano.

Trovi questo tutorial utile? Condividi con i tuoi amici per tenerlo in vita.
Sii il primo a commentare, apprezzo i tuoi suggerimenti. Per ulteriori domande potete commentare qui sotto.

Fonte: https://linuxiano.altervista.org/2022/10/whiptail/

Se vuoi sostenerci, puoi farlo acquistando qualsiasi cosa dai diversi link di affiliazione che abbiamo nel nostro sito o partendo da qui oppure alcune di queste distribuzioni GNU/Linux che sono disponibili sul nostro negozio online, quelle mancanti possono essere comunque richieste, e su cui trovi anche PC, NAS e il ns ServerOne. Se ti senti generoso, puoi anche donarmi solo 1€ o più se vuoi con PayPal e aiutarmi a continuare a pubblicare più contenuti come questo. Grazie!

Hai dubbi o problemi? Ti aiutiamo noi!

Se vuoi rimanere sempre aggiornato, iscriviti al nostro canale Telegram.
Se vuoi ricevere supporto per qualsiasi dubbio o problema, iscriviti alla nostra community Facebook o gruppo Telegram.
Cosa ne pensi? Fateci sapere i vostri pensieri nei commenti qui sotto.
Ti piace quello che leggi? Per favore condividilo con gli altri.
Amazon Music
Scopri le ultime offerte per dischi ssd su Acquista su Amazon
Scopri le ultime offerte per memorie RAM DDR su Acquista su Amazon
Scopri le ultime offerte per Chromebook su Acquista su Amazon
Scopri le ultime offerte per Raspberry su Acquista su Amazon

Potrebbero interessarti anche...

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.