|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre régulier
![]() |
Bonjour,
Voila je vous expose mon petit soucis. J'ai un script qui peut recevoir un nombre d'arguments variables, les deux premiers (obligatoires) sont des repertoires et les suivants sont des patches a appliquer. Ces arguments peuvent etre de differents types : un repertoire, une archive ou meme un regex du type *.patch. Au depart je faisais quelque chose du genre : Citation:
Citation:
Citation:
En attendant j'ai trouve une solution mais elle ne me plait guere : Citation:
Ludovic |
||||
|
|
10
|
|
|
#2 | ||
|
Membre émérite
![]() ![]() Inscription : octobre 2004 Messages : 668 ![]() |
Code :
__________________
Software becomes slower faster than hardware becomes faster http://xrenault.developpez.com API C standard (C ANSI ) |
||
|
|
40
|
|
|
#3 | |
|
Membre régulier
![]() |
Merci pour cette astuce.
Il va falloir que je teste si cela fonctionne bien car dans l'exemple que tu me donnes, tu reactives l'expansion des wilcards en sortie de boucle mais je vais en avoir besoin a l'interieur. Du coup pour etre tranquille, je peux faire quelque chose du genre : set -f Citation:
En tout cas merci pour cette reponse ca me resservira a coup sur ! |
|
|
|
01
|
|
|
#4 | |
|
Membre émérite
![]() ![]() Inscription : octobre 2004 Messages : 668 ![]() |
Citation:
Alors que ce soit avec un set -f ou autre chose, tu n'y couperas pas, ton code ne peux pas deviner pour toi quand tu as besoin ou non des wildcards
__________________
Software becomes slower faster than hardware becomes faster http://xrenault.developpez.com API C standard (C ANSI ) |
|
|
|
10
|
|
|
#5 |
|
Membre régulier
![]() |
Oui je suis d'accord, c'est juste dans le sens que desactiver les wildchars et les reactiver a un endroit ca me va mais commencer a le faire plusieurs fois dans le code j'aime moins, ca devient moins lisible.
Du coup je me pose la question utiliser set -f / set +f plusieurs fois dans le code ou rester sur la soution que j'avais deja utilisee c'est a dire me placer au bon endroit pour que lorsque la regex est interpretee elle le soit correctement. L'explication n'est peut-etre pas tres claire, je recois donc un argument avec le chemin des patches et une liste de patches a utiliser dans ce repertoire. Mon soucis etait que lors de l'interpretation dans la boucle for, bash prenait donc les fichiers qui pouvaient correspondre a la regex depuis l'endroit ou est execute le script et non depuis le repertoire des patches. Du coup j'allais dans ce repertoire, je recuperais un tableau avec tous les fichiers correspondant a la regex, je retournais dans mon repertoire d'origine et je continuais avec mon tableau. Je ne trouvais pas ca hyper propre ni clair mais je n'ai pas eu de retour negatif. Du coup je me pose la question garder ces quelques lignes ou utiliser set -f. |
|
|
10
|
|
|
#6 | |||
|
Membre émérite
![]() ![]() Inscription : octobre 2004 Messages : 668 ![]() |
Citation:
Code :
__________________
Software becomes slower faster than hardware becomes faster http://xrenault.developpez.com API C standard (C ANSI ) |
|||
|
|
10
|
|
|
#7 |
|
Membre régulier
![]() |
En fait c'est exactement ce que je vais mais juste pour recuperer ma liste "interpretee" avant de faire ma boucle.
Je ne le fais pas pour ma boucle for elle-meme car pour moi c'est plus simple de rester a la racine du projet plutot que de changer de repertoire plusieurs fois a l'interieur. Je trouvais ca un peu "tricky" mais ca ne semble pas choquer donc ca va. J'esperais qu'il existe une solution juste pour la ligne de mon for un truc du style et \$args aurait permis de ne pas interpreter ma regex par exemple ! |
|
|
00
|
|
|
#8 | ||
|
Membre émérite
![]() ![]() Inscription : octobre 2004 Messages : 668 ![]() |
Disons que tu peux t'en sortir comme ça alors :
Code :
Et ensuite, si tu as besoin d'interpréter les wildcards contenus dans la variable i, tu utilises $i, et sinon, si tu ne veux pas que ce soit interprété, tu utilises "$i" (avec les guillemets). Je ne sais pas si ça te convient davantage.
__________________
Software becomes slower faster than hardware becomes faster http://xrenault.developpez.com API C standard (C ANSI ) |
||
|
|
10
|
|
|
#9 | ||
|
Membre régulier
![]() |
Effectivement ca me plairait bien car ca reste localise mais ce n'est valable que si seul le premier argument a une regex :
Code :
|
||
|
|
00
|
|
|
#10 | ||
|
Membre émérite
![]() ![]() Inscription : octobre 2004 Messages : 668 ![]() |
Alors je te propose un truc comme ça :
Code :
Puis parcours du tableau où tu interprètes (ou non) les wildcards avec ou sans les guillemets autour de $i. Après faut faire gaffe, si tu passes par $@, ça risque de t'interpréter les wildcards sans même te demander ton avis
__________________
Software becomes slower faster than hardware becomes faster http://xrenault.developpez.com API C standard (C ANSI ) |
||
|
|
10
|
|
|
#11 |
|
Membre régulier
![]() |
|
|
|
00
|
|
|
#12 | |||
|
Membre émérite
![]() ![]() Inscription : octobre 2004 Messages : 668 ![]() |
Citation:
Code :
sh script.sh *.patch my_archive *.toto *.patch Code :
__________________
Software becomes slower faster than hardware becomes faster http://xrenault.developpez.com API C standard (C ANSI ) |
|||
|
|
10
|
|
|
#13 |
|
Membre régulier
![]() |
Ok, je ne me souviens plus comment est fait l'appel, il faudra que je regarde a nouveau le code mais je pense que ce sera bon et que ce sera la solution adoptee.
Merci bien pour cette aide tres efficace ! |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com