Bonjour,
je travaille à un petit script bash dont la fonctionnalité est de préparer une ligne de commande avec les options qui vont bien en fonction du contexte, puis de l’exécuter. Il s'agit concrètement d'utiliser gpscorrelate pour géo-taguer des photos (documentation ici).
la dernière ligne de mon script est donc
gpscorrelate -g $MonFicgierGPX -z $MaTimeZone -O $Decalage $MaListeDeFichiersPhotos
MaListeDeFichiersPhotos contient les chemins et noms des photos sélectionnées, séparés par des espaces (normal)
Tout fonctionne bien tant qu'il n'y a pas d'espace… dans le chemin et/ou le nom de mes fichiers (gpx ou jpg).
J'ai essayé avec IFS=$'\n', en échappant les espaces indésirables par sed 's/ /\ /g', sans succès.
Je sais que je suis dans un classique du genre mais cela fait 2 jours que je googuelise en vain. Quelqu'un(e) aurait-il la gentillesse d'éclairer ma lanterne ? J'ai des solutions de contournement mais j'aimerai bien comprendre quand même.
Merci d'avance.
# use more quotes
Posté par sputnick . Évalué à 2. Dernière modification : le 05/10/12 à 15:23
Salut,
il faut mettre des guillemets doubles autour des variables ;)
http://mywiki.wooledge.org/WordSplitting
[^] # Re: use more quotes
Posté par foutaises . Évalué à 1.
je suis d'accord avec serge
gpscorrelate -g "$MonFicgierGPX" -z $MaTimeZone -O $Decalage "$MaListeDeFichiersPhotos"[^] # Re: use more quotes
Posté par sputnick . Évalué à 1.
Serge ???
[^] # Re: use more quotes
Posté par Christophe Chapuis . Évalué à 2.
Sans doute une référence à Sergei Korolev :)
[^] # Re: use more quotes
Posté par _kaos_ . Évalué à 1.
Il dit qu'il a plus d'genou
[^] # Re: use more quotes
Posté par hervé Couvelard (page perso) . Évalué à 3.
fait péter les cahouette
ou les péri-cubes
[^] # Re: use more quotes
Posté par Vincent Gay (page perso) . Évalué à 1.
Ben non, pas comme ça au moins. Et c'est logique, puisqu'il y a des bons (entre les fichiers) et des mauvais espaces (dans les noms de fichiers).
J'ai essayé aussi :
et avec
3eme et 4ème tentatives avec
mêmes résultats
# Une solution qui marche
Posté par Vincent Gay (page perso) . Évalué à 2.
à force de tâtonnements…
Quelle suée !
[^] # Re: Une solution qui marche
Posté par wismerhill . Évalué à 4.
Il y a beaucoup plus simple, tu met chaque paramètre distinct dans un tableau, par exemple $params, puis tu profite de l'expansion du tableau dans les guillemets doubles "${params[@]}" qui va faire un mot pour chaque valeur du tableau, qu'elle contienne des espace ou non.
cf man bash à la section Arrays
# Je comprend pas l'exemple ...
Posté par Stephane COLIN (page perso) . Évalué à -1.
Je comprend pas l'exemple de la solution qui marche …
Moi je fait comme ça (script BASH) :
Ici je fais juste un 'echo' à la fin du script, toi tu execute …
Voilà comment je l'utilise et le résultat :
Exemple 1 ('tab completion' utilisée pour sélectionner les fichiers à traiter) :
Exemple 2 ('joker' utilisé pour sélectionner les fichiers à traiter) :
Était-ce le but recherché ?
A++
Envoyer un commentaire
Suivre le flux des commentaires
Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.