Bonjour,
J'ai l'impression que mapfile n'aime pas la réentrance pour les fichiers normaux.
Voici le souci que je rencontre:
Dans un premier temps, je crée 2 fonctions dont l'une appel l'autre via un mapfile:
Maintenant, appelons la fonction xx via un mapfile qui utilisera une substitution de process en guise de fichier d'entrée:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $ xx(){ mapfile -C yy -c 1 -t TT < <(echo "$@") ; } $ yy(){ echo "$@" ;}
Ici, tout est OK.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 $ mapfile -C xx -c 1 -t UU < <(echo -e "Premiere ligne" A{1..45} "\nDeuxieme ligne" B{1..45} "\nTroisieme ligne" C{1..45}) 0 0 Premiere ligne A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27 A28 A29 A30 A31 A32 A33 A34 A35 A36 A37 A38 A39 A40 A41 A42 A43 A44 A45 0 1 Deuxieme ligne B1 B2 B3 B4 B5 B6 B7 B8 B9 B10 B11 B12 B13 B14 B15 B16 B17 B18 B19 B20 B21 B22 B23 B24 B25 B26 B27 B28 B29 B30 B31 B32 B33 B34 B35 B36 B37 B38 B39 B40 B41 B42 B43 B44 B45 0 2 Troisieme ligne C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15 C16 C17 C18 C19 C20 C21 C22 C23 C24 C25 C26 C27 C28 C29 C30 C31 C32 C33 C34 C35 C36 C37 C38 C39 C40 C41 C42 C43 C44 C45
Maintenant, créons un fichier qui contiendra exactement les mêmes données que la substitution de process:
Et appelons la fonction xx via un mapfile mais qui cette fois utilisera le fichier précédemment créé en guise de fichier d'entrée:
Code : Sélectionner tout - Visualiser dans une fenêtre à part $ echo -e "Premiere ligne" A{1..45} "\nDeuxieme ligne" B{1..45} "\nTroisieme ligne" C{1..45} >fic.txt
Et là, on voit que seule la première ligne est complète... Et bien sur, je ne rencontre ce souci que lorsque je fais un appel à mapfile dans une fonction appelée par un autre mapfile.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 $ mapfile -C xx -c 1 -t UU <fic.txt 0 0 Premiere ligne A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 A15 A16 A17 A18 A19 A20 A21 A22 A23 A24 A25 A26 A27 A28 A29 A30 A31 A32 A33 A34 A35 A36 A37 A38 A39 A40 A41 A42 A43 A44 A45 0 1 B17 B18 B19 B20 B21 B22 B23 B24 B25 B26 B27 B28 B29 B30 B31 B32 B33 B34 B35 B36 B37 B38 B39 B40 B41 B42 B43 B44 B45 0 2 ligne C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15 C16 C17 C18 C19 C20 C21 C22 C23 C24 C25 C26 C27 C28 C29 C30 C31 C32 C33 C34 C35 C36 C37 C38 C39 C40 C41 C42 C43 C44 C45
Si quelqu'un a une explication, je suis preneur.
Partager