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 (site web personnel, Mastodon) . Évalué à 2. Dernière modification le 05 octobre 2012 à 15:23.
Salut,
il faut mettre des guillemets doubles autour des variables ;)
http://mywiki.wooledge.org/WordSplitting
On ne peut pas mettre d'array dans le string...
[^] # 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 (site web personnel, Mastodon) . Évalué à 1.
Serge ???
On ne peut pas mettre d'array dans le string...
[^] # Re: use more quotes
Posté par Christophe . É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
Matricule 23415
[^] # Re: use more quotes
Posté par hervé Couvelard . Évalué à 3.
fait péter les cahouette
ou les péri-cubes
[^] # Re: use more quotes
Posté par Vincent Gay (site web personnel) . É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 (site web personnel) . É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 (site web personnel) . É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++
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.