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
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
.0 votes
La question est vieille de 8 ans.
0 votes
Dupe non fermé : stackoverflow.com/questions/8354482/dialogue de la base-script