71 votes

Comment faire une interface graphique pour les scripts bash ?

Je veux faire des dialogues graphiques pour mon script mais je ne sais pas comment. J'ai entendu quelque chose à propos de GTK-Server ou quelque chose comme ça. Si quelqu'un sait comment lier Bash avec tcl/tk je serais également satisfait.

S'il vous plaît ne postez pas quelque chose comme "changer en C++" parce que 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 "graphiques" comme des couleurs dans la console, mais des fenêtres graphiques que je peux déplacer, minimiser, etc. Je vais tester xmessage mais je ne pense pas que ce soit ce que je recherche.

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

3 votes

Vous voulez absolument zenity .

1 votes

Dans le passé, il y avait "dtksh", une implémentation de ksh-93 avec accès aux bibliothèques Motif. Vous pouviez définir des callbacks de fonctions shell et créer une application graphique complète avec des scripts shell. Il comprenait des dialogues, des boutons, des boîtes de texte, des boutons radio,...

1 votes

Jetez un coup d'œil à tkbash .

67voto

dbr Points 66401

Avant d'utiliser réellement les dialogues de l'interface graphique, pensez à utiliser les invites de la console. Très souvent, vous pouvez vous en sortir avec de simples invites "y/n ?", ce qui, en bash, est possible grâce à la fonction read commande ..

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

Si le prompt 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 ces systèmes). Le site 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 fournissent, "changer en C++" est vraiment la meilleure méthode (bien que je recommanderais Python/Ruby plutôt que C++ pour de telles tâches de remplacement de shell-script).

Je veux faire une interface simple pour un jeu étrange, la barre de progression pour la santé ou autre est l'exemple de ce que je veux. La variable "HEALTH" est 34, donc la barre de progression sera remplie à 34/100.

En tant que script en 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 (afin d'éviter le retour à la ligne sur un terminal de taille standard) :

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

Zenity dispose également d'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, essayez d'écrire votre jeu en tant que script en Python/Ruby/Perl/C++/etc car il semble que vous repoussez les limites de ce qu'un shell-script peut faire

1 votes

Je ne veux pas le oui/non, mais 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 "HEALTH" est 34, donc la barre de progression doit être remplie à 34/100. C'est ce que je veux faire.

0 votes

Le site Dialogue de progression Le lien ci-dessus est cassé :(

0 votes

Alors facile à utiliser : Forbidden You don't have permission to access /users/zenity/stable/ on this server. Apache/2.2.15 (Red Hat) Server at help.gnome.org Port 80

24voto

nxadm Points 1247

Si vous voulez écrire une interface graphique en bash, zenity est la solution idéale. Voici 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 très utilisables. Bien sûr, il n'est pas aussi flexible qu'une boîte à outils intégrée à un langage de programmation, mais dans certains cas, il est vraiment utile.

1 votes

Sauf que le manuel est inutile : aide.gnome.org/utilisateurs/zenity

16voto

Pierre Points 15256

il existe 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 en utilisant des boîtes de dialogue à partir d'un shell script. Ces types de boîtes de dialogue sont implémentés (bien que tous ne soient pas nécessairement compilés en dialogue). "

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

1 votes

C'est drôle, j'étais en train d'installer une version de l'utilitaire quand je suis tombé sur votre réponse. Le dialogue fonctionne très bien, je pense.

0 votes

En plus de la dialog utilitaire, whiptail devrait également être mentionné. Ils maintiennent même un certain niveau de compatibilité entre eux.

14voto

Charlie Martin Points 62306

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

1 votes

Mais ce n'est pas bash

11voto

Renato Aquino Points 457

Vous pourriez utiliser dialogue c'est-à-dire ncurses ou queue de fouet c'est-à-dire argot basé.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X