Come creare una GUI per gli script di bash?

Voglio fare alcuni dialoghi grafici per il mio script ma non so come. Ho sentito qualcosa su GTK-Server o qualcosa del genere. Se qualcuno sa come colbind Bash a tcl / tk, anch’io sono soddisfatto.

Per favore non pubblicare qualcosa come “cambia in C ++” perché il mio progetto deve essere uno script in Bash; Non ci sono altre opzioni.

Qualche idea?

EDIT: Grazie per le risposte, ma non voglio “grafica” come nei colors della console, ma windows grafiche che posso spostare, ridurre a icona ecc. xmessage , ma non penso che sarà quello che sto cercando per.

EDIT 2: Non voglio creare una semplice finestra di dialogo come yes / no, ma alcune interfacce come barre di avanzamento e pulsanti, qualcosa come un gioco.

    Prima di utilizzare effettivamente i dialoghi della GUI, prendere in considerazione l’utilizzo dei prompt della console. Molto spesso riesci a farla franca con il semplice “y / n?” richiede, che in bash si ottiene tramite il comando di read ..

     read -p "Do something? "; if [ $REPLY == "y" ]; then echo yay; fi 

    Se il prompt della console non lo taglierà, Zenity è davvero facile da usare , ad esempio:

      zenity --error --text="Testing..." zenity --question --text="Continue?" 

    Funziona solo su Linux / Gnome (o meglio, verrà installato solo di default su tali sistemi). Il metodo di read funzionerà praticamente su qualsiasi piattaforma (incluse le macchine headless o tramite SSH)

    Se hai bisogno di qualcosa di più complesso di quello letto o Zenity, “cambiare in C ++” è davvero il metodo migliore (anche se raccomanderei Python / Ruby su C ++ per tali compiti di shell-script-replacement)

    Voglio fare un’interfaccia semplice per qualche gioco strano, la barra di avanzamento per la salute o qualcosa è l’esempio per quello che voglio. La variabile “HEALTH” è 34, quindi fai avanzare la barra in 34/100

    Come script da riga di comando, usava Python:

     $ export HEALTH=34 $ python -c "import os; print '*' * int(os.environ.get('HEALTH', 0))" ********************************** 

    O per normalizzare i valori compresi tra 1 e 78 (in modo da non ottenere il ritorno a capo su una dimensione di terminale standard):

     $ python -c "import os; print '*' * int((int(os.environ.get('HEALTH', 0)) / 100.0) * 78)" 

    Zenity ha anche un dialogo di progresso ,

     #!/bin/sh ( echo "10" ; sleep 1 echo "# Updating mail logs" ; sleep 1 echo "20" ; sleep 1 echo "# Resetting cron jobs" ; sleep 1 echo "50" ; sleep 1 echo "This line will just be ignored" ; sleep 1 echo "75" ; sleep 1 echo "# Rebooting system" ; sleep 1 echo "100" ; sleep 1 ) | zenity --progress \ --title="Update System Logs" \ --text="Scanning mail logs..." \ --percentage=0 if [ "$?" = -1 ] ; then zenity --error \ --text="Update canceled." fi 

    Come ho detto prima, se Zenity non può fare quello che ti serve, cerca di scrivere il tuo gioco come uno script “corretto” in Python / Ruby / Perl / C ++ / etc perché sembra che tu stia spingendo i limiti di ciò che una shell -script può fare ..

    Se vuoi scrivere un’interfaccia grafica in bash, zenity è la strada da percorrere. Questo è ciò che puoi fare con esso:

     Application Options: --calendar Display calendar dialog --entry Display text entry dialog --error Display error dialog --info Display info dialog --file-selection Display file selection dialog --list Display list dialog --notification Display notification --progress Display progress indication dialog --question Display question dialog --warning Display warning dialog --scale Display scale dialog --text-info Display text information dialog 

    Combinando questi widget è ansible creare GUI piuttosto utili. Certo, non è flessibile come un toolkit integrato in un linguaggio di programmazione, ma in alcuni casi è davvero utile.

    c’è un comando chiamato dialog che usa la libreria ncurses. ” Dialog è un programma che ti consente di presentare una serie di domande o di visualizzare messaggi utilizzando windows di dialogo da uno script di shell.Questi tipi di windows di dialogo sono implementati (anche se non tutti sono necessariamente compilati in windows di dialogo)

    vedi http://pwet.fr/man/linux/commandes/dialog

    Bene, se puoi usare Tcl / Tk nel tuo ambiente, probabilmente dovresti scrivere uno script TCL e usarlo. Potresti anche guardare al desiderio .

    Potresti usare dialoghi basati su ncurses o whiptail basati su slang .

    Penso che entrambi abbiano binding GTK o Tcl / Tk.

    Puoi gtk-server per questo. Gtk-server è un programma che viene eseguito in background e fornisce un’interfaccia testuale per consentire ad altri programmi (inclusi gli script di bash) di controllarlo. Ha esempi per Bash ( http://www.gtk-server.org/demo-ipc.bash.txt , http://www.gtk-server.org/demo-fifo.bash.txt )

    Per favore, dai un’occhiata alla mia biblioteca: http://sites.google.com/site/easybashgui

    È destinato a gestire, con gli stessi comandi impostati, indifferentemente tutti e quattro i grandi strumenti “kdialog”, “Xdialog”, “cdialog” e “zenity”, a seconda che X sia in esecuzione o meno, se DE è KDE o Gnome o altro. Ci sono 15 diverse funzioni (tra le quali ci sono due chiamate “progresso” e “aggiusta”) …

    Ciao 🙂

    Se hai Qt / KDE installato, puoi usare kdialog , che apre una finestra di dialogo Qt. È ansible specificare facilmente la visualizzazione di una finestra di dialogo Sì / No, OK / Annulla, inserimento di testo semplice, immissione della password, ecc. È ansible accedere ai valori di ritorno da queste windows di dialogo nella shell.

    Apparentemente qualcuno ha scritto un’interfaccia bash per GTK +. Non sono sicuro che tu possa farlo funzionare facilmente, ma potrebbe valere la pena provare. Potete trovare qui:

    http://home.eol.ca/~parkw/index.html#gtk