web-dev-qa-db-fra.com

Comment faire une interface graphique pour les scripts bash?

Je veux créer des dialogues graphiques pour mon script mais je ne sais pas comment. J'entends quelque chose à propos de GTK-Server ou quelque chose comme ça. Si quelqu'un sait comment associer Bash à tcl/tk, je suis également satisfait.

Merci de ne pas publier quelque chose comme "changer en C++" car mon projet doit être un script en Bash; Il n'y a pas d'autres options.

Des idées?

EDIT: Merci pour les réponses mais je ne veux pas de "graphismes" comme dans les couleurs de la console, mais des fenêtres graphiques que je peux déplacer, réduire au minimum, etc. Je vais tester xmessage, mais Je ne pense pas que ce sera ce que je recherche.

EDIT 2: Je ne veux pas créer un dialogue simple comme oui/non, mais certaines interfaces comme des barres de progression et des boutons, un peu comme un jeu.

63
lauriys

Avant d'utiliser réellement les dialogues d'interface graphique, envisagez d'utiliser les invites de la console. Assez souvent, vous pouvez vous en tirer avec un simple "y/n?" les invites que vous obtiendrez en utilisant la commande read ..

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

Si l'invite de la console ne suffit pas, Zenity est vraiment facile à utiliser , par exemple:

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

Cela ne fonctionne que sur Linux/Gnome (ou plutôt, il ne sera installé par défaut que sur de tels systèmes). La méthode read fonctionnera sur pratiquement toutes les plateformes (y compris les machines sans tête ou via SSH)

Si vous avez besoin de quelque chose de plus complexe que ce que read ou Zenity fournit, "changer en C++" est vraiment la meilleure méthode (bien que je recommande Python/Ruby sur C++ pour de telles tâches de remplacement de scripts Shell)

Je veux faire une interface simple pour un jeu étrange, la barre de progression pour la santé ou quelque chose est l'exemple de ce que je veux. La variable "SANTÉ" vaut 34, alors remplissez la barre de progression 34/100

En tant que script de ligne de commande, il utiliserait Python:

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

Ou pour normaliser les valeurs comprises entre 1 et 78 (afin d'éviter les retours à la ligne sur une taille de terminal standard):

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

Zenity a également un dialogue de progression ,

#!/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

Comme je l'ai déjà dit, si Zenity ne peut pas faire ce dont vous avez besoin, envisagez d'écrire votre jeu en tant que script "approprié" en Python/Ruby/Perl/C++/etc. -script peut faire ..

61
dbr

Si vous voulez écrire une interface utilisateur graphique en bash, zenity est la voie à suivre. Voici ce que vous pouvez en faire:

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

En combinant ces widgets, vous pouvez créer de jolies interfaces graphiques utilisables. Bien sûr, ce n'est pas aussi flexible qu'une boîte à outils intégrée dans un langage de programmation, mais dans certains cas, c'est vraiment utile.

20
nxadm

il existe une commande appelée dialog qui utilise la bibliothèque ncurses. " Dialog est un programme qui vous permet de présenter diverses questions ou d'afficher des messages à l'aide de boîtes de dialogue à partir d'un script Shell. Ces types de boîtes de dialogue sont implémentés (même si tous ne sont pas nécessairement compilés dans dialogue) "

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

13
Pierre

Eh bien, si vous pouvez utiliser Tcl/Tk dans votre environnement, vous devriez probablement écrire un script TCL et l'utiliser. Vous pourriez aussi regarder souhait .

13
Charlie Martin

Vous pouvez utiliser dialogue c'est ncurses basé ou whiptail c'est argot .

Je pense que les deux ont des liaisons GTK ou Tcl/Tk.

11
Renato Aquino

Consultez ma bibliothèque: http://sites.google.com/site/easybashgui

Il est destiné à gérer, avec les mêmes commandes, indifféremment les quatre gros outils "kdialog", "Xdialog", "cdialog" et "zenity", selon que X fonctionne ou non, si D.E. est KDE ou Gnome ou autre. Il y a 15 fonctions différentes (dont deux appelées "progrès" et "ajustement") ...

Au revoir :-)

6
vaisarger

Vous pouvez gtk-server pour cela. Gtk-server est un programme qui fonctionne en arrière-plan et fournit une interface textuelle permettant à d'autres programmes (y compris les scripts bash) de le contrôler. Il a des exemples pour Bash ( http://www.gtk-server.org/demo-ipc.bash.txt , http://www.gtk-server.org/demo -fifo.bash.txt )

6
dmitry_vk

Si vous avez Qt/KDE installé, vous pouvez utiliser kdialog , ce qui ouvre une fenêtre de dialogue Qt. Vous pouvez facilement spécifier d'afficher une boîte de dialogue Oui/Non, OK/Annuler, une saisie de texte simple, un mot de passe, etc. Vous avez alors accès aux valeurs de retour de ces boîtes de dialogue sur le shell.

3
Brian Carper

Apparemment, quelqu'un a écrit une interface bash pour GTK +. Je ne suis pas sûr que vous puissiez le faire fonctionner facilement, mais cela vaut la peine d'essayer. Vous pouvez le trouver ici:

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

2
Tamas Czinege