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.
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..
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.
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)"
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.
Vous pouvez utiliser dialogue est ncurses ou arubais est argot base.
Je pense que les deux ont des liaisons GTK ou Tcl/Tk.
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)
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 :-)
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.
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: