Comment faire une interface graphique pour les scripts bash? [fermé]

Je veux faire 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 lier Bash avec tcl/tk, je suis également satisfait.

Veuillez ne pas poster quelque chose comme "changer en C++" parce que mon projet doit être un script dans Bash; il n'y a pas d'autres options.

Des idées?

Modifier: Merci pour les réponses mais je ne veux pas de "graphiques" comme dans les couleurs dans la console, mais des fenêtres graphiques que je peut se déplacer, minimiser etc. Je vais tester xmessage, mais je ne pense pas que ce sera ce que je cherche.

Modifier 2: Je ne veux pas faire une boîte de dialogue simple comme oui / non, mais une interface comme des barres de progression et des boutons, quelque chose comme un jeu.

61
demandé sur lauriys 2009-05-30 00:35:37

9 réponses

Avant d'utiliser les dialogues GUI, pensez à utiliser les invites de la console. Très souvent, vous pouvez vous en sortir avec simple " y / n?"invites, qui dans bash vous réalisez via le read Commande ..

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

Si l'invite de la console ne le coupe 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 à peu près n'importe quelle plate-forme (y compris machines sans tête, ou via SSH)

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

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

Comme 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 entre 1 et 78 (de sorte que vous n'obtenez pas de LINE-wrapping sur une taille de terminal standard):

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

Zenity a également une boîte de 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 comme un script "correct" en Python/Ruby/Perl/C++/etc car il semble que vous repoussiez les limites de ce qu'un script shell peut faire..

57
répondu dbr 2016-02-19 12:55:12

Si vous voulez écrire une INTERFACE graphique en bash, zenity est le chemin à parcourir. C'est ce que vous pouvez faire avec:

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 des interfaces graphiques assez 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.

19
répondu nxadm 2018-05-10 20:43:03

Il y a une commande appelée dialog, qui utilise la bibliothèque ncurses. " Dialog est un programme qui vous permettra de présenter une variété de 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 (bien que toutes ne soient pas nécessairement compilées dans dialog)"

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

13
répondu Pierre 2009-05-29 20:44:34

Eh Bien, si vous pouvez utiliser Tcl/Tk dans votre environnement, vous devriez probablement écrire un script TCL et l'utiliser. Vous pouvez également regarder souhaitent.

13
répondu Charlie Martin 2009-05-29 20:46:13

Vous pouvez utiliser dialogue est ncurses ou arubais est argot base.

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

11
répondu Renato Aquino 2009-05-29 20:52:31

Vous pouvez gtk-serveur pour ce. Gtk-server est un programme qui s'exécute en arrière-plan et fournit une interface basée sur le texte pour permettre à 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
répondu dmitry_vk 2009-05-30 06:25:50

S'il vous plait, jetez un oeil à ma bibliothèque: http://sites.google.com/site/easybashgui

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

Bye :-)

6
répondu vaisarger 2010-05-27 06:50:11

Si Qt / KDE est installé, vous pouvez utiliser kdialog , qui affiche une fenêtre de dialogue Qt. Vous pouvez facilement spécifier pour afficher une boîte de dialogue Oui / Non, OK / Annuler, entrée de texte simple, entrée de mot de passe, etc. Vous avez ensuite accès aux valeurs de retour de ces boîtes de dialogue au niveau du shell.

3
répondu Brian Carper 2009-05-29 21:03:58

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

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

2
répondu Tamas Czinege 2009-05-29 20:43:00