Incompréhension lecture fichier

Résolu/Fermé
ginius - Modifié le 8 juin 2021 à 11:35
 ginius - 24 mai 2021 à 11:22
Bonjour tout le monde!

Je fais appel à vous car là je suis dans une impasse !! Je tente de faire de la lecture simple ligne de fichiers mais je n'y arrive pas. Le comportement est tout du moins incohérent. Je m'explique.

J'ai un fichier
.yml
qui liste des chemins. (Dans ce cas facile, les 3 chemins présents sont dans la même dossier que le fichier
.yml
). Volontairement, je ne nomme pas le
doc3.yml
) Ah oui et pour info les
docx.yml
sont identiques en contenu.

racine---liste.yml
doc1.yml
doc2.yml
doc3.yml
doc4.yml
script.sh


J'ai également un script (normal) qui boucle sur la liste (via un simple
echo
j'ai bien mon doc1,2 et 4 qui sortent en console).
Mais là où c'est étrange, c'est qu'à chaque itération de ma boucle sur la liste, je tente de lire le fichier courant.
Ça ne marque pas sur le doc4, ça met que le doc2 et 1 n'existent pas...
Je ne comprends pas.

Voici mon code en question.

#!/bin/bash

v1="=poc"
v2=":poc" 
MA_VARIABLE="$v1 $v2" 
MA_LISTE=liste.yml

function boucleOnFile()
{
  #LECTURE liste de fichier à parcourir
  echo lecture fichier $1
  while read line || [ -n "$line" ]; 
   do 
    echo $line
   done < $1
}

#LECTURE liste valeur de recherche
for v in $MA_VARIABLE;
 do
  #LECTURE liste de fichier à parcourir
  while read lineDoc || [ -n "$lineDoc" ]; 
   do 
    boucleOnFile $lineDoc
   done < $MA_LISTE
 done
 
 



et voici ce que ça donne :

$ ./script.sh
lecture fichier doc1.yml
: No such file or directoryyml
lecture fichier doc2.yml
: No such file or directoryyml
lecture fichier doc4.yml
je suis un document
j'ai une adresse IP =poc
j'ai également une adresse :poc et :poc
lecture fichier doc1.yml
: No such file or directoryyml
lecture fichier doc2.yml
: No such file or directoryyml
lecture fichier doc4.yml
je suis un document
j'ai une adresse IP =poc
j'ai également une adresse :poc et :poc


Si vous avez une piste sur mon problème (certainement, mon code mais je ne trouve pas) je suis preneur!!!

Après certains tests, j'en conclue qu'il n'itère pas sur les 2 premiers fichiers. Seulement le dernier déclaré...
A voir également:

1 réponse

J'ai fini par trouver mon problème étant donné que ça ne marchait que sur le dernier élément de la liste je me suis douté qu'il s'agissait d'une mauvaise interprétation des saut de ligne (ahhhhhh les sauts de ligne, toute une histoire). Il me suffisait donc de faire un simple sed \n par rien pour avoir le nom du fichier 'correcte' voici mon code :

#!/bin/bash

v1="=poc"
v2=":poc" 
MA_VARIABLE="$v1 $v2" 
MA_LISTE=liste.yml

function boucleOnFile()
{
  #LECTURE liste de fichier à parcourir
  echo lecture fichier $1
  while read line || [ -n "$line" ]; 
   do 
    echo $line
   done < $1
}

#LECTURE liste valeur de recherche
for v in $MA_VARIABLE;
 do
  #LECTURE liste de fichier à parcourir
  while read lineDoc || [ -n "$lineDoc" ]; 
   do 
   MON_DOC=$(echo $lineDoc | sed "s/\n//g")
    boucleOnFile $MON_DOC
   done < $MA_LISTE
 done
0