#1 Le 08/10/2007, à 15:44
- Azael
[résolu] Bash, Zenity, Listes et espace
Bonsoir, j'ai fait un ptit script pour mon frangin afin qu'il ait une liste de ses jeux installés sous nunux, liste qui lui permet de les lancer facilement à partir de ce script qui garderait en mémoire le chemin de l'exécutable.
Mais voilà j'ai un petit problème à savoir, lorsque dans ce script on ajoute un chemin contenant des espaces, zenity ce chemin comme différents éléments d'une liste.
Du genre: wine /home/martin/.wine/drive_c/Program Files/World of Warcraft/WoW.exe
devient:
wine
/home/martin/.wine/drive_c/Program
Files/World
of
Warcraft/WoW.exe
#!/bin/sh
mkdir .gamesonlinux
reponse1="first"
liste_jeux(){
while [ "$reponse1" = "first" ] || [ "$reponse1" = "Modifier" ] || [ "$reponse1" = "*****" ]; do
if [ -e ~/.gamesonlinux/liste_des_jeux.cfg ]; then
reponse1=`zenity --title="Games on Linux" --window-icon="question" --height="500" --text="Choisir le jeu ou modifier pour modifier la liste" --list --column="Liste des jeux disponibles" $(cat ~/.gamesonlinux/liste_des_jeux.cfg) "*****" "Modifier" "Quitter"`
if [ "$reponse1" = "WoW" ]; then
nocomp wow
elif [ "$reponse1" = "Warsow" ]; then
nocomp /home/quentin/warsow
elif [ "$reponse1" = "Modifier" ]; then
edition_liste
elif [ "$reponse1" = "Quitter" ]; then
exit 0
elif [ "$reponse1" != "" ] && [ "$reponse1" != "*****" ]; then
nocomp $reponse1
zenity --info --title="Fin du programme" --text="Fin du jeu"
fi
else
zenity --info --title="Erreur dans le traitement de la liste de jeux" --text="Il n'existe pas de fichier de configuration pour la liste de jeux. Cela signifie que vous lancer ce programme pour la première fois ou que vous ne l'avez pas lancé depuis la dernière réinitialisation de la liste"
zenity --info --title="Erreur dans le traitement de la liste de jeux" --text="Vous allez maintenant être amené à choisir un jeux à ajouter dans la liste"
action_ajouter
fi
done
}
edition_liste(){
reponse2=`zenity --title="Action à effectuer" --text="Voulez-vous ajouter ou supprimer un jeu de la liste ?" --list --column="Action" "Ajouter" "Supprimer" "Réinitialiser"`
if [ "$reponse2" = "Ajouter" ]; then
action_ajouter
elif [ "$reponse2" = "Supprimer" ]; then
action_supprimer
elif [ "$reponse2" = "Réinitialiser" ]; then
rm ~/.gamesonlinux/liste_des_jeux.cfg
fi
}
action_ajouter(){
ajouter=`zenity --title="Choix du fichier à ajouter" --file-selection`
if [ "$ajouter" != "" ]; then
zenity --title="Exécutable Wine ?" --question --text="Ce jeu est-il à lancer à l'aide de Wine ?"
if [ "$?" = 1 ]; then
echo "$ajouter" >> ~/.gamesonlinux/liste_des_jeux.cfg
else
echo "wine "$ajouter"" >> ~/.gamesonlinux/liste_des_jeux.cfg
fi
fi
}
action_supprimer(){
zenity --info --title="Erreur" --text="La fonction n'est pas encore disponible"
}
liste_jeux
La partie qui pose problème:
reponse1=`zenity --title="Games on Linux" --window-icon="question" --height="500" --text="Choisir le jeu ou modifier pour modifier la liste" --list --column="Liste des jeux disponibles" $(cat ~/.gamesonlinux/liste_des_jeux.cfg) "*****" "Modifier" "Quitter"`
A vot' bon coeur
Dernière modification par Azael (Le 09/10/2007, à 16:29)
" Mieux vaut être fou parmi les fous que d'être sage et rester seul "
D. Diderot
Linux
Hors ligne
#2 Le 08/10/2007, à 16:05
- pipomolo
Re : [résolu] Bash, Zenity, Listes et espace
Je vois deux solutions:
- Soit tu crées un lien symbolique pour chaque exécutable contenant des espaces dans son nom, et tu utilises ce lien dans ta liste de jeux
- Soit, au moment d'ajouter dans ta liste un echo "wine "$ajouter"", tu remplaces, à coups de sed et/ou awk, les occurence de chaque espace par un "\ ", afin de masquer le caractère spécial espace...
Hors ligne
#3 Le 08/10/2007, à 23:26
- Azael
Re : [résolu] Bash, Zenity, Listes et espace
Yop, alors la première solution après moult essais n'a pas été concluante. Wine ne digère pas bien les liens symboliques apparemment.
Par contre la deuxième solution fonctionne sauf que j'ai du rajouter le caractère d'échappement à la main parce que je ne comprends rien à la doc ni de sed ni de awk...
Donc si pouvez m'expliquer comment faire en sorte que les espaces de la variable $ajouter soient précédés du caractère d'échappement, je t'en serais gré
Merci d'avance
" Mieux vaut être fou parmi les fous que d'être sage et rester seul "
D. Diderot
Linux
Hors ligne
#4 Le 09/10/2007, à 15:00
- Sleipnir
Re : [résolu] Bash, Zenity, Listes et espace
bjr,
Tu pourrais peut etre faire quelque chose avec xargs
http://forum.ubuntu-fr.org/viewtopic.php?id=138062
Hors ligne
#5 Le 09/10/2007, à 16:29
- Azael
Re : [résolu] Bash, Zenity, Listes et espace
Finalement je m'en suis sorti avec sed.
C'est pas très beau mais ça a le mérite de fonctionner sans problème
action_ajouter(){
ajouter=`zenity --title="Choix du fichier à ajouter" --file-selection`
nom_lanceur=`zenity --title="Choix du nom de lanceur" --text="Entrez un nom pour ce lanceur (sans espace)" --entry`
if [ "$ajouter" != "" ]; then
zenity --title="Exécutable Wine ?" --question --text="Ce jeu est-il à lancer à l'aide de Wine ?"
if [ "$?" = 1 ]; then
echo "$ajouter" >> ~/.gamesonlinux/"$nom_lanceur"
else
echo $ajouter >> ajoutertmp1
sed -e s/" "/'\\ '/g ajoutertmp1 >> ajoutertmp2
ajouter2=`cat ajoutertmp2`
rm ajoutertmp1 ajoutertmp2
echo $ajouter
echo $ajouter2
echo "wine "$ajouter2"" >> ~/.gamesonlinux/""$nom_lanceur"_avec_wine"
fi
fi
}
M'enfin quand même je trouve que le man de sed est très très peu explicite sur son fonctionnement...
Merci pour les pistes.
" Mieux vaut être fou parmi les fous que d'être sage et rester seul "
D. Diderot
Linux
Hors ligne
#6 Le 10/10/2007, à 06:35
- pipomolo
Re : [résolu] Bash, Zenity, Listes et espace
Bien joué!
Tu pourrais gagner quelques lignes en faisant directement:
echo "wine `sed -e 's/ /\\ /g' $ajouter`" >> ~/.gamesonlinux/""$nom_lanceur"_avec_wine"
C'est pas beautiful ça ?
Pour un truc un peu plus satisfaisant, tu pourrais écrire ton script en Perl qui intègre, entre autre, les fonctions de sed et awk...
Dernière modification par pipomolo (Le 10/10/2007, à 06:40)
Hors ligne