2009-05-29 27 views
58

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 collegare Bash a tcl/tk, anch'io sono soddisfatto.Come creare una GUI per gli script di bash?

Si prega di 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 io non voglio "grafica", come nei colori nella console, ma finestre grafiche che posso spostare, ridurre al minimo ecc mi metterà alla prova xmessage, ma non lo faccio pensa che sarà quello che sto cercando.

EDIT 2: Non voglio fare una semplice finestra di dialogo come sì/no, ma un po 'l'interfaccia, come barre di avanzamento e bottoni, qualcosa di simile a un gioco.

+0

se lo desiderate 'zenity'. – jmc

+1

In passato c'era "dtksh" un'implementazione di ksh-93 con accesso alle librerie Motif. È possibile impostare i callback delle funzioni di shell e creare un'applicazione grafica completa con script di shell. Caratterizzato dialogo, pulsante, casella di testo, pulsante di opzione, ... – Emmanuel

+0

Dai un'occhiata a ['tkbash'.] (Https://github.com/phil294/tkbash) – Blauhirn

risposta

55

Prima di utilizzare effettivamente i dialoghi della GUI, prendere in considerazione l'utilizzo di prompt della console. Molto spesso riesci a farla franca con il semplice "y/n?" prompt, che in bash a raggiungere attraverso il read command ..

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

Se prompt della console è solo non è tagliato, Zenity è davvero easy to use, ad esempio:

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

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

Se hai bisogno di qualcosa di più complesso di quello letto o Zenity, "cambiare in C++" è davvero il metodo migliore (anche se io " d raccomandare Python/rubino su C++ per tali compiti script di shell-sostituzione)

voglio fare semplice interfaccia per qualche strano gioco, la barra di avanzamento per la salute o qualcosa è l'esempio per quello che voglio. Variabile "salute" è 34, in modo da rendere barra di avanzamento compilato 34/100

come uno script da riga di comando, che sarebbe utilizzare 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 (quindi non si ottiene ritorno a capo su un formato terminale standard):

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

Zenity ha anche un Progress Dialog,

#!/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 cosa può fare uno script di shell.

+1

Non voglio il sì/no, ma 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 compilare la barra di avanzamento in 34/100. Che voglio fare. – lauriys

2

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

13

v'è un comando chiamato dialog che usa la libreria ncurses. "Dialog è un programma che vi permetterà di presentare una serie di domande o messaggi sul display utilizzando le finestre di dialogo da uno script di shell. Questi tipi di finestre di dialogo sono implementati (anche se non tutti sono necessariamente compilato in dialogo)"

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

+1

Abbastanza divertente, stavo solo installando una versione dell'utilità quando avessi risposto alla tua risposta. Il dialogo funziona abbastanza bene, penso. –

13

Bene, se è possibile utilizzare Tcl/Tk nel proprio ambiente, è probabile che si debba scrivere uno script TCL e utilizzarlo. Potresti anche dare un'occhiata a wish.

+0

ma che non è bash – Blauhirn

10

È possibile utilizzare dialog ovvero ncurses basato o whiptail basato su slang.

Penso che entrambi abbiano binding GTK o Tcl/Tk.

3

Se si installa Qt/KDE, è possibile utilizzare kdialog, che visualizza una finestra di dialogo Qt. È possibile specificare facilmente la visualizzazione di una finestra di dialogo Sì/No, OK/Annulla, inserimento di testo semplice, immissione della password, ecc. È possibile accedere ai valori di ritorno da queste finestre di dialogo nella shell.

18

Se si desidera scrivere un'interfaccia grafica in bash, zenity è la strada da percorrere. Questo è ciò che puoi fare con questo:

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 è possibile creare interfacce grafiche piuttosto utili. Certo, non è flessibile come un toolkit integrato in un linguaggio di programmazione, ma in alcuni casi è davvero utile.

6

prega, dare un'occhiata a mia biblioteca: http://sites.google.com/site/easybashgui

Esso è destinato a gestire, con gli stessi comandi impostati, indifferentemente tutti i quattro 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 cui ci sono due chiamato "progresso" e "regolare") ...

Bye :-)

+0

cool, quindi è un adattatore. Gli strumenti supportati sono richiesti o tu userai qualsiasi cosa trovi, compatibilmente con l'ambiente rilevato? – drAlberT

+0

Questo in effetti è abbastanza bello. Il programmatore bash non deve preoccuparsi di quale piattaforma l'utente userà KDE o gnome; rileverà automaticamente l'ambiente e mostrerà l'interfaccia utente di conseguenza utilizzando le librerie disponibili. – shivams

Problemi correlati