[bash] if [ -n chaine ] avec chaine=retour d'une commande

Résolu
Swiss Knight Messages postés 1956 Date d'inscription   Statut Membre Dernière intervention   -  
 Utilisateur anonyme -
Salut tout le monde,

j'ai un petit problème avec bash où je m'amuse à trier des images :

for image in 'ls $1 | grep -E ".*\.jpe?g" 2>/dev/null' 
do 
        keyword='exiftool $1/$image | grep -i "MotClef"'
        if [ $keyword ]
        then 
                do_stuff
        fi
done


le test if me fait toujours aller le "do_stuff" , même lorsque la commande qui définit keyword ne retourne rien.

pourtant ceci fonctionne si un fichier contient "chose" dans son nom, et ça m'affiche bonjour :

#!/bin/bash

var='ls | grep chose'

if [ $var ]
then
	echo "bonjour"
fi


Merci de vos lumières ;) !
A voir également:

3 réponses

Utilisateur anonyme
 
salut,

et comme ça
shopt -s extglob
for img in "$1"/*.jp?(e)g
do
   exiftool "$img" | grep -qi "MotClef" && {
      do_stuff
   }
done
0
Swiss Knight Messages postés 1956 Date d'inscription   Statut Membre Dernière intervention   110
 
Salut,
peut-être que ça marche, je n'ai pas essayé.

Je ne cherche pas à trouver une solution (j'en ai une), mais je cherche à comprendre dans le cas exposé ci-dessus uniquement, pourquoi lorsque la commande exiftool ne retourne rien sur une image, ça fait quand même aller le do_stuff sur cette image...

Par exemple, si une image, mettons "IMG_1234.jpg" ne contient pas le mot clé "MotClef," elle ne doit pas être traitée par les commandes dans le if suivant. Or elle est traitée comme toutes les autres.

Et je ne comprends pas pourquoi. Elle ne devrait pas normalement.
0
Utilisateur anonyme
 
il faudrait peut-être quand même que tu apprennes les bonnes façons de faire !
parce que, finalement, le if ne sert à rien, et la variable non plus.
0
Swiss Knight Messages postés 1956 Date d'inscription   Statut Membre Dernière intervention   110
 
Je me réponds puisque je pense avoir trouvé la réponse :

il faut que le :
        if [ $keyword ]

soit en fait un :
        if [ "$keyword" ]


(avec des guillemets)
Ne me demandez pas pourquoi par contre... :-S

;-)
0
Utilisateur anonyme
 
eh ben tu vois, t'es pas complètement perdu. XD
0