Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1362 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [résolu][bash] appeler une variable dans une commande entre quotes ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[résolu][bash] appeler une variable dans une commande entre quotes ?

n°1325363
Swiss_Knig​ht
600 MeV since 1957.
Posté le 25-11-2012 à 02:09:34  profilanswer
 

Salut,
 
question toute bête sans doute mais je ne trouve pas de réponse :
j'ai une commande comme ça dans un script, mais je n'arrive pas à trouver comment affecter la valeur de la variable $img_tag dans la commande exiftool :
 

Code :
  1. img_tag="soleil"
  2. sun_image=`exiftool -if '$keywords =~ /$img_tag/i' -filename -s3 $1/$image`


où $1 est le chemin d'un répertoire et $image le nom d'un fichier image dans ce répertoire (je suis dans une boucle for ici).
 
 
Les simples quotes, nécessaires à exiftool ici, m'embêtent car ils "empêchent" la lecture du contenu de la variable $img_tag... ce qui est ce que je cherche à obtenir, évidemment. Et sans doute pour ne pas compliquer les choses, vous l'aurez remarqué, toute la commande est entre back-quotes....
 
 
Merci.


Message édité par Swiss_Knight le 25-11-2012 à 15:01:06

---------------
Hergestellt in der Schweiz.
mood
Publicité
Posté le 25-11-2012 à 02:09:34  profilanswer
 

n°1325365
Profil sup​primé
Posté le 25-11-2012 à 07:06:03  answer
 

salut,
 
as-tu essayé des guillemets "
ou un panachage:

Code :
  1. sun_image=$(exiftool -if "$keywords"' =~ '"/$img_tag"'/i' -filename -s3 $1/$image)


je ne trouve pas ce paquet dans les dépôts de squeeze, je ne peux donc pas tester :(
 
ps: il est peut-être plus ergonomique pour toi d'utiliser les back-quotes, mais pour coder (surtout pour imbriquer) c'est pénible.

n°1325383
Swiss_Knig​ht
600 MeV since 1957.
Posté le 25-11-2012 à 14:02:51  profilanswer
 

Salut watael,
 
marche pas ta soluce ; toutes les images sont passées à la moulinette, peu importe leur tag.  
 
si tu veux tu peux regarder la doc du -if d'exiftool ici :
http://www.sno.phy.queensu.ca/~phi [...] ml#if_expr
et en remontant d'un niveau dans l'arborescence du site, tu as les liens généraux dont le téléchargement si tu veux (peux?) essayer avec ta distro.


---------------
Hergestellt in der Schweiz.
n°1325385
Profil sup​primé
Posté le 25-11-2012 à 14:43:26  answer
 

Code :
  1. exiftool -if '$keywords =~ /'"$img_tag"'/i' -filename -s3 $1/$image

peut-être.
 
et toi ?, tu peux nous faire part de tes autres tentatives ? histoire qu'on retape pas dedans !

n°1325386
Swiss_Knig​ht
600 MeV since 1957.
Posté le 25-11-2012 à 15:00:47  profilanswer
 

Ouaip, ça marche comme ça, (j'avais essayé plein de possibilités de quotes/doubles quotes avant, mais j'avais conservé les back quotes en début et fin, j'avais même tenté d'échapper les singles quotes comme ça : '\'' sans succès)
 
donc ceci fonctionne :
 

Code :
  1. for image in `ls $1 | grep -E ".*\.jpe?g" 2>/dev/null`
  2. do 
  3.         sun_image=$(exiftool -if '$keywords =~ /'"$img_tag"'/i' -filename -s3 -q -q $1/$image)
  4.         if [ "${sun_image}" ] ; then           
  5.                 convert $1/$sun_image -resize $rapport "$1/miniatures/$sun_image"
  6.         fi
  7. done


 
j'ai encore dû rajouter -q -q pour éviter des soucis d'exécution lorsque le tag_img n'existe pas : il voulait convertir le chemin $1/ sans nom d'image derrière...
 
Par contre je doute encore de la nécessité de la boucle for mais je ne vois pas bien ce qu'il y aurait à faire...


---------------
Hergestellt in der Schweiz.
n°1325398
Profil sup​primé
Posté le 25-11-2012 à 21:39:43  answer
 

encore une fois, je ne peux pas tester, mais je partirais sur du find | while read

Code :
  1. find $1 -maxdepth 1 -type f -regex '.*\.jpe?g' -printf '%H@%f\n' | while IFS="@" read dir file
  2. do
  3.    sun_image=$(exiftool -if '$keywords =~ /'"$img_tag"'/i' -filename -s3 -q -q "$dir/$file" )
  4.    test -n "$sun_image" && convert $dir/$sun_image -resize $rapport "$dir/miniatures/$sun_image"
  5. done

c'est quoi $sun_image ? c'est une image différente de $file ?

n°1325400
Swiss_Knig​ht
600 MeV since 1957.
Posté le 25-11-2012 à 23:15:46  profilanswer
 

$sun_img c'est une variable contenant le nom d'un fichier dans lequel la fonction exiftool a trouvé un certain tag ($img_tag). Je n'ai pas de variable $file. -filname est une option d'exiftool.
 
 
----
En gros, ce petit script me permet de passer en revenu l'intégralité des images d'un répertoire (donné en argument lors de l'appel de mon script) dont l'extension est .jpg ou .jpeg, pour lui dire de miniaturiser (ratio donné en argument aussi) seulement les images contenant un certain tag (donné en argument aussi) et de les mettre dans un sous répertoire avec le même nom que les originales.
 
En creusant peut-être à fond avec exiftool il y a peut-être moyen de faire tenir ça en une ligne en renvoyant le résultat à imagemagick avec un pipe, mais je ne retiendrai jamais une commande si longue et ça me permet de m'exercer un peu à faire du bash... Je ne m'y mets jamais sinon. :D
 
Je vais regarder ton idée du find de plus près, je ne sais pas trop ce que IFS signifie ni les %H@%f\n :S


---------------
Hergestellt in der Schweiz.
n°1325402
Profil sup​primé
Posté le 26-11-2012 à 02:46:54  answer
 

Citation :

il y a peut-être moyen de faire tenir ça en une ligne en renvoyant le résultat à imagemagick avec un pipe

oui, peut-être avec xargs
un truc du style

Code :
  1. exiftool -if '$keywords =~ /'"$img_tag"'/i' -filename -s3 -q -q "$dir/*.jp?g" | xargs -I{} convert $dir/{} -resize $rapport "$dir/miniatures/"

il faut voir comment se comporte exiftool si on lui passe une liste de fichier ($dir/*.jp?g) au lieu d'un seul fichier.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [résolu][bash] appeler une variable dans une commande entre quotes ?

 

Sujets relatifs
Bash - Tableausubstitution: sh vs bash
script ok ligne de commande pas en crontabtache planifiée windows avec commande sur poste distant debian
make shell bashAide sur script bash
commande envoi mail avec authentificationCommande find sous condition
Réception donnée hexadécimale sur port serie avec BashScript Bash pour récuperer seulement l'adresse IP
Plus de sujets relatifs à : [résolu][bash] appeler une variable dans une commande entre quotes ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR