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 02/03/2013, à 16:46

redisded

(Résolu) aide pour traiter la sortie d'affichage d'une fonction

Bonjour à tous,

je rencontre un probleme dans un de mes scripts que je parviens pas à résoudre et en appel donc à vos lumières.

J'ai besoin dans ce script d'ouvrir plusieurs liens dans une fenetre firefox.

Pour le moment, je lance une boucle qui lance x fois la commande firefox, x étant en fonction du nombre d'onglets à ouvrir.

Ce traitement est relativement long, car je dois insérer des sleep enre chaque lancement de firefox sous peine de recevoir de maniere aléatoire des message d'erreur m'informant que firefox est déja en cours d'execution.

je souhaitais donc simplifier tout cela en utilisant la syntaxe suivante :

firefox "www.google.fr" "http://forum.ubuntu-fr.org"

cette commande fonctionne sans pb dans un terminal.

Mes liens étant générés par le script, j'ai créé une fonction d'affichage se terminant par un echo qui me renvoi par exemple :

"www.google.fr" "http://forum.ubuntu-fr.org"

et j'insere ensuite dans mon script :

firefox $(ma_fonction)

Seulement, je peux constater en activant set -x que la ligne est interprétée comme ceci :

firefox '"www.google.fr" "http://forum.ubuntu-fr.org"'

le resultat est donc que firefox m'ouvre un unique onglet avec dans la barre d'adresse :

"www.google.fr" "http://forum.ubuntu-fr.org"

ce qui ne peut evidemment pas fonctionner.

Comment puis-je faire pour que la sortie de ma fonction ne soit pas protégée par des simple quotes ?

Sinon, avez vous un autre moyen à me suggérer pour pouvoir arriver à mes fins?

N'hesitez pas à me demander des précisions si j'ai oublié quelque chose.

Merci d'avance de vos propositions !

red.

Dernière modification par redisded (Le 02/03/2013, à 21:20)

Hors ligne

#2 Le 02/03/2013, à 17:46

Watael

Re : (Résolu) aide pour traiter la sortie d'affichage d'une fonction

salut,

C'est bizarre.
Moi, je n'ai ça

'"www.google.fr" "http://forum.ubuntu-fr.org"'

avec set -x, que si je mets des guillemets autour de "$(ma_fonction)".

Si les guillemets sont correctement positionnés dans la fonction, il ne devrait pas être utile de les protéger, et d'en ajouter.


Connected \o/
Welcome to sHell. · eval is evil.

En ligne

#3 Le 02/03/2013, à 18:37

redisded

Re : (Résolu) aide pour traiter la sortie d'affichage d'une fonction

bizarre en effet...

Je n'ai pas précisé mais mon script est en bash, as-tu fais ton test en bash également ?

Hors ligne

#4 Le 02/03/2013, à 18:44

redisded

Re : (Résolu) aide pour traiter la sortie d'affichage d'une fonction

je n'ai pas précisé non plus, mais la fonction renvoi le contenu d'une variable, je pense que c'est la raison pour laquelle des simples quotes sont ajoutées.

Hors ligne

#5 Le 02/03/2013, à 18:54

Watael

Re : (Résolu) aide pour traiter la sortie d'affichage d'une fonction

Oui, je suis en bash aussi.

le mieux, àmha, lorsqu'on utilise des fonctions, c'est de leur faire traiter les paramètres qu'on leur passe en argument, plutôt que des variables globales.

$ f() { echo "$1" "$2";}
$ set -x; echo $(f "foo bar" "bar baz"); set +x
++ f 'foo bar' 'bar baz'
++ echo 'foo bar' 'bar baz'
+ echo foo bar bar baz
foo bar bar baz
+ set +x

Connected \o/
Welcome to sHell. · eval is evil.

En ligne

#6 Le 02/03/2013, à 19:43

redisded

Re : (Résolu) aide pour traiter la sortie d'affichage d'une fonction

merci pour ton aide watael.

En fait je me rend compte que mon pb vient du fait que j'ai changé l'IFS en retour à la ligne, chose indispensable au bon déroulement de mon script, y compris pour une des requete qui me permet d'obtenir le lien complet.

Je continue à chercher !

Hors ligne

#7 Le 02/03/2013, à 21:21

redisded

Re : (Résolu) aide pour traiter la sortie d'affichage d'une fonction

Résolu.

Je m'en suis finalement sortie en changeant temporairement l'IFS et en passant pas un fichier temporaire.

Hors ligne