Forum Programmation.shell find et substitution de variables

Posté par  .
Étiquettes : aucune
0
3
déc.
2004
Bonjour,

J'essaye le script suivant:
toto="/{home,tmp}" ; find $toto

Qui me renvoie:
find: /{home,tmp}: No such file or directory

Pourtant les codes suivants marchent:
find /{home,tmp}
toto="/hom*" ; find $toto


Vous pouvez me dépanner ?
Merci.
  • # peut-être une clownerie, mais....

    Posté par  . Évalué à 1.

    ... chezmoiçamarche.com avec ceci :

    $> $toto="/{home/tmp}" ; find `eval $toto`

    Y'a sûrement mieux, mais je n'ai que ça sous la main !
    • [^] # Re: peut-être une clownerie, mais....

      Posté par  . Évalué à 2.

      Argggg .... Trop rapide...

      Y'a évidement pas de $ devant le toto affecté !
      Faudrait plutôt lire donc :

      $> toto="/{home,tmp}" ; find `eval $toto`

      Par contre, j'ai fait quelques essais, et je ne sais pas quel comportement tu souhaites avoir. Je m'explique :
      Dans un répertoire, j'ai créé deux sous répertoire, comme suit :
      $ mkdir $HOME/temp/r1 ; mkdir $HOME/temp/r2

      Je m'y suis placé :
      $ cd $HOME/temp

      Et là, j'ai fait des essais :
      1)
      $ find ./{r1,r2}
      ./r1
      ./r2

      Par contre, si je fais :
      $ toto="./{r1,r2}" ; find `eval $toto`
      ca revient au même que si je fais :
      $ find

      Ca me liste tout le contenu du répertoire $HOME/temp, ce qui n'est peut-être pas le résultat escompté.
      En tout cas, lorsque tu fais find ./r{1,2}, c'est le shell qui concatène successivement 1 puis 2 à ./r, il faut donc trouver un moyen pour que ce soit envoyé tel quel par le biais de ton shell, comme ça, peut-être :
      $ toto="find ./r{1,2}" ; eval $toto
      ./r1
      ./r2

      même résultat qu'en 1)
      • [^] # Re: peut-être une clownerie, mais....

        Posté par  . Évalué à 1.

        Le résultat attendu est obtenu avec
        toto="find ./r{1,2}" ; eval $toto

        Ce comportement me semble quand même bizarre.

        Merci pour ton aide.
  • # Ordre des substitutions

    Posté par  . Évalué à 1.

    C'est dû à l'ordre des substitutions: d'abord {, puis les variables et enfin les patterns.

    $ ls
    a1 a2 c
    $ a=*
    $ echo a{$a,b}
    a1 a2 ab
    $ echo "a{$a,b}"
    a{*,b}
    $ echo a{"$a",b}
    a* ab

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.