Partage
  • Partager sur Facebook
  • Partager sur Twitter

[shell] nom de fichier avec espaces

pb de listage

Sujet résolu
    10 octobre 2007 à 11:20:18

    Salut all,
    encore moi et mon shell.
    En TD hier, la prof a dit que pour lister les fichiers d'un repertoire sans pb avec les esapce, il faut utiliser :

    set liste = "`ls`"
    foreach fichier ( $liste )
    echo $fichier
    end

    avec les guillemets. J'ai essayé et ça marche pas, j'ai un fichier "fichier cache" et le nom apparait sur deux lignes donc ça marche pas. C'est du csh que je fais (toujours) mais si vous avez la solution en bash, je suis preneur, ça m'aidera peut-être.

    Quelqu'un saurait comment faire ?

    Merci à tous :)
    • Partager sur Facebook
    • Partager sur Twitter
    "Que par le vent, ce sera tangent". Eh ben j'ai jamais foutu les pieds dans une salle de classe, mais l'effet reste le meme ! :D
      10 octobre 2007 à 12:44:05

      Salut,

      En bash, je connais au moins deux solutions.

      La plus simple, encadrer $liste de double quotes:
      1. liste=`ls`
      2. for fichier in "$liste"; do
      3.     echo $fichier
      4. done


      La moins simple, modifier la variable du shell IFS, qui est censé contenir les caractères que le shell utilise comme délimiteurs de token (par défaut, l'espace, la tabulation horizontale et la nouvelle ligne) :
      1. (IFS=$'\t\n'
      2. liste=`ls`
      3. for fichier in $liste; do
      4.     echo $fichier
      5. done)

      Le code est enveloppé dans un sous-shell (avec (...)) afin d'éviter que la modification de la variable IFS ne perturbe le comportement du reste du sript.

      (Malheureusement, je n'ai pas appris le csh depuis la dernière fois, donc je ne sais pas dans quelle mesure c'est valable --- ou dans quelle mesure on peut adapter ça --- en csh...)
      • Partager sur Facebook
      • Partager sur Twitter
        10 octobre 2007 à 13:11:05

        Oki pourtant chez moi les doubles quote, ça foire.
        Même si tu connais pas csh, c'est pas grave, ça m'aide quand-même :)
        En tout cas, c'est promis, après les partiels, je brule mes cours de csh. lol

        Bon je vais essayer de voir ce qui va pas et au pire j'abandonne. lol

        Encore merci gouttegd

        EDIT : j'aurais une question : que veut dire IFS=$'\t\n' ?
        • Partager sur Facebook
        • Partager sur Twitter
        "Que par le vent, ce sera tangent". Eh ben j'ai jamais foutu les pieds dans une salle de classe, mais l'effet reste le meme ! :D

        [shell] nom de fichier avec espaces

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown