[Résolu]script bash avec libnotify

Bonsoir à tous. Voilà j’ai un léger souci. J’avais prévu de créer un script bash qui me générerait des mots de passe aléatoire d’une longueur définie à l’avance (ou changeable par l’utilisateur mais c’est pas la fonctionnalité que j’implémenterais en premier… :smt002 ).Donc ce script fonctionne bien, merci pour lui. Par contre, après la découverte récente du paquet libnotify et donc de la commande notify-send, je me suis dis que je pourrais afficher la clé générée grâce au script. Donc ça fonctionne… des fois. En effet, des fois il affiche la clé générée, des fois non… A y perdre son latin… Alors si quelqu’un a une idée… Testé sous Easy Peasy 1.5 (Ubuntu 9.04) et Debian Lenny. Merci d’avance :smt006

#!/bin/bash
rm ./clef
i=0
caractere=(a z e r t y u i o p "'" q s d f g h j k l m n b v c x w '<' '>' '&' é '"' '(' - è _ ç à ')' = + 0 9 8 7 6 5 4 3 2 1 '~' '#' '{' [ '|' '\' ^ @ ] '}' '`' $ £ ^ ¨ ù % µ '!' § ':' '/' ';' '.' , ? ¿ ¡ € ¥ N B V C X W Q S D F G H J K L M P O I U Y T R E Z A À Ä à â ä z ç Ç ý Ý û ü Û Ü þ Þ å Å î ï Ï Î ô ö Ö Ô ê ë Ë Ê ø Ø æ Æ Ð ð Ù ã Ã )

while [ "$i" -lt "63" ]
do 
		
	nombre=$RANDOM		
	let "nombre %= 127"			
	carac2[$i]=${caractere[$nombre]}
	((i++))	
done

i=0
while [ "$i" -lt "63" ]					
do
	echo -n ${carac2[$i]}	>> ./clef		#sauvegarde de la clef dans un fichier
	((i++))
done
carac3=`less ./clef`					#récupération de la clef sauvegardée dans le fichier
notify-send "Mot de passe généré" "${carac3[*]}"	

PS: vous pardonnerez les commentaires qui peuvent paraitre évident, mais je suis pas vraiment expérimenté en matière de script bash ^^.

Salut,

Je parie sur le fait le caractère " est la cause de tes soucis.

Ou tout autre caractère interprété par bash.

[quote=“Link78340”]carac3=`less ./clef` #récupération de la clef sauvegardée dans le fichier notify-send "Mot de passe généré" "${carac3[*]}" [/quote]
Moi j’aurais fais ça :

carac3=`cat ./clef` #récupération de la clef sauvegardée dans le fichier notify-send "Mot de passe généré $carac3"
cat plutôt que less parce que cat n’interprète pas ce qu’il lit (et il est plus léger).
Ce que tu récupère avec cat c’est pas un tableau.

Pour ce qui est du caractère " je viens de tester avec dash :

$ var=\" $ echo "salut c'est moi $var t'es ou ?" salut c'est moi " t'es ou ?
Par contre il a pas aimé le :

$ echo "salut c'est moi ${var[1]} t'es ou ?" sh: Bad substitution

Merci à tous les deux. Donc visiblement cela poourrait venir de la chaîne… Donc j’ai changé le less par un cat, et j’ai ensuite voulu changer le premier caractère de la chaîne, pour être sur qu’il ne s’agisse en aucun cas d’un caractère qui puisse être interprêté par bash.
Même résultat des fois il m’affiche mot de passe généré suivi de la clé, des fois par contre il n’affiche que la phrase mot de passe généré.

#!/bin/bash
rm ./clef
i=0
caractere=(a z e r t y u i o p "'" q s d f g h j k l m n b v c x w '<' '>' '&' é '(' - è _ ç à ')' = + 0 9 8 7 6 5 4 3 2 1 '~' '#' '{' [ '|' ^ @ ] '}' '`' $ £ ^ ¨ ù % µ '!' § ':' '/' ';' '.' , ? ¿ ¡ € ¥ N B V C X W Q S D F G H J K L M P O I U Y T R E Z A À Ä à â ä z ç Ç ý Ý û ü Û Ü þ Þ å Å î ï Ï Î ô ö Ö Ô ê ë Ë Ê ø Ø æ Æ Ð ð Ù ã Ã '"' '\')
alphabet=(p a o z i e u r y t q m l s k d j f h g w n b x v c )
while [ "$i" -lt "63" ]
do 
		
	nombre=$RANDOM				
	let "nombre %= 127"					
	if [ "$i" == "0" ]
	then
		let "nombre %= 26"
		carac2[$i]=${alphabet[$nombre]}
	else		
	carac2[$i]=${caractere[$nombre]}
	fi
	((i++))	
done

i=0
while [ "$i" -lt "63" ]					
do
	echo -n ${carac2[$i]}	>> ./clef		#sauvegarde de la clef dans un fichier
	((i++))
done
carac3=`cat ./clef`					#récupération de la clef sauvegardée dans le fichier
notify-send "Mot de passe généré" "$carac3"

Il ya un bug dans notify:
bugs.debian.org/cgi-bin/bugreport.cgi?bug=499904

Exemple, chez moi j’ai des resultats bizarres.
Comparer
notify-send ‘summary’ '<'
et
notify-send ‘summary<’

L’un marche, pas l’autre…

Tu pourrai remplacer
notify-send “Mot de passe généré” "$carac3"
par
notify-send “Mot de passe généré $carac3”

J’ai essayé, donc ça change pas grand chose, des fois il affiche rien, des fois il affiche le mot de passe généré et la clé vu que tout est dans la même chaîne de caractères… De plus en adoptant cette syntaxe tout est dans le titre et il me semble qu’avec notify, le nombre de caractères est réduit.

Ah… moi ca marche a chaque fois sur mon pc.
Après la limite… je sais pas.

C’est des mots de passe pour quoi?
Les mot de passes unix crypt sont aussi limités. Je ne sais plus combien. 13 ?

Remplace notify-send par echo pour voir si ça viens de lui où de la syntaxe.

Nan mais c’est clair que ca vient de notify, y a un bug referencé!

Respire profondément

Tu t’adresses à moi?

Oui détend toi, il faut valider les choses étapes après étapes.
Le bug que tu montre ne dis pas clairement dans quel condition il se produit.
Ne serais-ce que si on veut pouvoir aider à la résolution, il faut voir les choses étape après étape. Et valider tout ce qui est sûr.

Moi les évidences, en informatique, j’en ai pas.

[quote]Oui détend toi, il faut valider les choses étapes après étapes.
[/quote]
Ah oui je suis tendu c’est vrai… très tendu meme…
:smt033

Aller, je vais repeter…

Si tu relis tout ce que j’ai dit, tu verras que j’ai fait un test unitaire…

marche pas…

Bon… tu proposes quelle etape intermediaire?

moi j’ai testé son code avec echo … qui marche à tous les coups.

pour être sûr, j’ai fait un echo après le notify-send

donc pour un echo qui marche à tous les coups, le notify ne suit pas à tous les coups.

[quote=“L0u!$”]moi j’ai testé son code avec echo … qui marche à tous les coups.

pour être sûr, j’ai fait un echo après le notify-send

donc pour un echo qui marche à tous les coups, le notify ne suit pas à tous les coups.[/quote]
Maintenant on peut mettre en cause notify-send soit à cause de sa syntaxe soit à cause d’un bug.

@ignatioza > ce n’est pas parce que notify-send fonctionne mal qu’il ne faut pas remettre en cause le reste du code.

Salut à tous et merci de vous pencher sur le sujet. Donc à la base il s’agit d’un générateur de clé type wpa donc 63 caractères. Auparavant, je faisais un echo afin d’afficher la clé en ligne de commande. J’ai ensuite voulu le remplacer par notify-send. Donc soit il a du mal quand la chaîne contient des caractères qu’il considère comme ésotériques, soit notify-send a du mal, soit ma chaîne ou mes tableaux sont mal créés/ initialisés, que sais-je…

Je te propose de contourner le problème. N’utilise plus notify-send, mais plutôt zenity.
Tu remplace la dernière ligne par

Remplace

par

Libnotify utilise du html…

Merci à tous, le script fonctionne à présent convenablement, la dernière solution avec libnotify a sensiblement amélioré les choses, le ratio est bien plus intéréssant, il a tendance a planter que si je lance une dizaine de fois consécutivement le script, alors qu’avant c’était limite une fois sur 2. Pour ce qui est de de zenity, j’ai lu un peu de doc dessus, et c’est vraiment très intéréssant, je pense que ya moyen d’améliorer encore mon script avec celui-ci, quand j’aurai bien compris comment ça fonctionne. Encore merci à tous je pense que je peux le passer en résolu :smiley:

Comme quoi, ignatioza, tu vois ce n’était pas un bug mais un problème d’utilisation de notify-send.

@Link78340 > voici une table des correspondances des caractère HTML :
commentcamarche.net/contents … carac.php3