|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Candidat au titre de Membre du Club
![]() Boris CouturierÉtudiant Inscription : avril 2011 Messages : 21 ![]() |
Bonjour, j'ai cette ligne en shell sur freeBSD:
Code :
sed -n "/CUNIT_RUN_SUMMARY/,$"p ${curent} | while read ligne; do N'y à-t-il pas un moyen de récupérer mes variables hors du while ? (j'ai essayer export, ou faire des set avant le while, mais ça ne fonctionne pas mieux) Merci |
|
|
10
|
|
|
#2 |
|
Membre Expert
![]() |
tu veux pas mettre plus d'infos ? plus de détails sur ton script ?
|
|
|
01
|
|
|
#3 | ||
|
Candidat au titre de Membre du Club
![]() Boris CouturierÉtudiant Inscription : avril 2011 Messages : 21 ![]() |
En résumé, ça donne quelque chose comme ça (d'abord quelques infos):
"liste contient" le resultat de qq ls ect, en gros, une liste sur des fichiers xml. "nom_balise" et le nom de la balise de la ligne courante du fichier xml "valeur" est la valeur contenu dans les balises xml. Code :
(bien entendu je ne fais pas juste un echo de la variables tel quel, et je ne peux pas le faire à l'intérieur de la boucle while) |
||
|
|
10
|
|
|
#4 | ||
|
Membre éclairé
![]() Inscription : février 2011 Messages : 83 ![]() |
Y'a peut-être moyen de ne pas utiliser le pipe...
Exemple : Code :
__________________
Neon Suite by FRUiT (kde4.6) http://tinyurl.com/yzm7cee "Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley) clean |
||
|
|
10
|
|
|
#5 |
|
Candidat au titre de Membre du Club
![]() Boris CouturierÉtudiant Inscription : avril 2011 Messages : 21 ![]() |
J'y avais pensé, mais je préfère eviter.
Enfin si je dis ça c'est uniquement par soucis de perf, mais je sais pas du tout en shell si c'est vraiment plus lourd d'écrire et lire dans un fichier temp (sachant que le resultat du sed doit faire plus ou moins 30 lignes à chaques fois) |
|
|
01
|
|
|
#6 | ||
|
Membre éclairé
![]() Inscription : février 2011 Messages : 83 ![]() |
Ou alors évite le while read qui suxe mégadur :
Code :
__________________
Neon Suite by FRUiT (kde4.6) http://tinyurl.com/yzm7cee "Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley) clean |
||
|
|
10
|
|
|
#7 | ||
|
Membre éclairé
![]() Inscription : février 2011 Messages : 83 ![]() |
Sinon ça ce serait mieux non ?
Code :
__________________
Neon Suite by FRUiT (kde4.6) http://tinyurl.com/yzm7cee "Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley) clean |
||
|
|
10
|
|
|
#8 | ||
|
Membre Expert
![]() |
Côté perf, ça devrait pas poser de problème.
En supposant que ton code est plus intéressant que ton exemple qui écrase à chaque ligne la variable $run_suites (à moins que cela ne soit le week-end qui arrive qui me fatigue Code :
|
||
|
|
01
|
|
|
#9 | ||
|
Expert Confirmé Sénior
![]() Inscription : février 2008 Messages : 2 070 ![]() |
Bonjour,
en ne fait, pour l'instant, que supposer que tu n'utilises pas BASH, est-ce vrai ? alors, pourquoi pas : Code :
|
||
|
|
00
|
|
|
#10 |
|
Expert Confirmé Sénior
![]() francois Ingénieur systèmes et réseaux Inscription : juillet 2006 Messages : 3 534 ![]() |
évites de faire aussi ... mais ça c'est juste pour optimiser les perfs....
sed sait gérer les commandes multiples .... en séquence forcément mais même sur résultat d'une commande sed précédente.... et enfin ne fais pas un mais un ou un |
|
|
00
|
|
|
#11 | |||
|
Membre éclairé
![]() Inscription : février 2011 Messages : 83 ![]() |
Citation:
BSD y'a bash ou pas ? je connais pas du tout personnellement... Et bon c'est pas pour en rajouter hein ^^ mais : En gros ça nous donne un beau for in $(ls)... aie ! Y'a un problème conceptuel là.
__________________
Neon Suite by FRUiT (kde4.6) http://tinyurl.com/yzm7cee "Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley) clean |
|||
|
|
10
|
|
|
#12 | |||
|
Candidat au titre de Membre du Club
![]() Boris CouturierÉtudiant Inscription : avril 2011 Messages : 21 ![]() |
Citation:
Code :
let "total_suites=$total_suites+$run_suites" Citation:
et j'ai déjà fait quelque chose comme ça au début, mais le xml est structuré comme ça: <BALISE> valeur </BALISE> et le for me fait 3 lignes là dessus, car il sépare sur les espaces. Citation:
frp31, pourquoi il est mieux d’éviter le ... | while ? (et je pars sur un while ... done < fichier, mais je voulais juste éviter le fichier temporaire, mais tant pis.) |
|||
|
|
00
|
|
|
#13 |
|
Candidat au titre de Membre du Club
![]() Boris CouturierÉtudiant Inscription : avril 2011 Messages : 21 ![]() |
|
|
|
00
|
|
|
#14 | ||
|
Membre éclairé
![]() Inscription : février 2011 Messages : 83 ![]() |
Citation:
Cela dit ça reste du bricolage. Citation:
__________________
Neon Suite by FRUiT (kde4.6) http://tinyurl.com/yzm7cee "Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley) clean |
||
|
|
00
|
|
|
#15 | ||
|
Candidat au titre de Membre du Club
![]() Boris CouturierÉtudiant Inscription : avril 2011 Messages : 21 ![]() |
Ok, bon à savoir, c'est vrai qu'en y pensant, ls ne fait qu'afficher des noms.
Mais ça existe en shell des variables autres que textuelles ? x) Sinon avec le IFS, ça fonctionne bien (je l'avais juste un peu mal placé, mais maintenant c'est bon) j'ai plus mon pipe, et j'ai plus mon while qui sux (ça je sais pas non plus pourquoi d'ailleurs) Merci pour les réponses (j'ai essayé ta méthode Alex, c'est une bonne idée, mais dans mon cas, je pense pas pouvoir l'utiliser, mon while se trouvait dans un for, et j'avais besoin de mes variables hors de ce for) Code :
|
||
|
|
00
|
|
|
#16 |
|
Membre éclairé
![]() Inscription : février 2011 Messages : 83 ![]() |
J'ai retrouvé le lien qui explique pourquoi ne pas parser ls :
http://mywiki.wooledge.org/ParsingLs Et aussi une page très intéressante : http://mywiki.wooledge.org/BashPitfalls (lire notamment le premier chapitre)
__________________
Neon Suite by FRUiT (kde4.6) http://tinyurl.com/yzm7cee "Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley) clean |
|
|
00
|
|
|
#17 |
|
Membre Expert
![]() |
A mon avis, tu devrais pouvoir simplifier ton script...
Je ne dirais pas que mon idée est bonne; c'est juste bon à savoir et ça peut permettre de dépanner, mais ça n'est pas super propre (c'est d'ailleurs la seule de la page à avoir un vote négatif A mon avis, je pense que tu as plutôt soit un problème d'organisation de ton script, soit tu ne devrais pas utiliser le shell qui est peut être trop limité pour ce que tu cherches à faire ? |
|
|
20
|
|
|
#18 | |
|
Membre Expert
![]() |
Citation:
Pour info : http://mywiki.wooledge.org/BashFAQ/024 Ca ressemble vachement au problème |
|
|
|
00
|
|
|
#19 |
|
Candidat au titre de Membre du Club
![]() Boris CouturierÉtudiant Inscription : avril 2011 Messages : 21 ![]() |
Perso, je trouve le shell de base pas super propre, vu ce qu'on peut faire avec, Mais (je le répète encore) je m'y connais pas assez pour affirmer ça.
Sinon, je l'ai déjà simplifié par rapport à avant (où j'avais 2 boucles for quasi identiques à part que la liste des fichiers était dans un dossier différent...) En gros ce que ce script fait, il cherche dans 2 répertoires (et dans des sous-répertoires, ect...) des fichiers avec une extension .xml, puis quand il à la liste, il lit chaque fichier xml à partir d'une certaine ligne pour piocher des infos particulières, et à la fin générer un .xml global résumant les infos de tous les fichiers xml trouvés. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com