Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 smile

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é smile

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 smile

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 ? wink

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