IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

[Bash 4.4.7]: Bug mapfile ?


Sujet :

Shell et commandes GNU

  1. #1
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 276
    Points : 12 721
    Points
    12 721
    Par défaut [Bash 4.4.7]: Bug mapfile ?
    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:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ xx(){ mapfile -C yy -c 1 -t TT < <(echo "$@") ; }
    $ yy(){ echo "$@" ;}
    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
    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
    Ici, tout est OK.
    Maintenant, créons un fichier qui contiendra exactement les mêmes données que la substitution de process:
    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 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
    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
    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.

    Si quelqu'un a une explication, je suis preneur.
    Cordialement.

  2. #2
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 725
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 725
    Points : 15 125
    Points
    15 125
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Si quelqu'un a une explication, je suis preneur.
    Explication, aucune.

    Constatation, le même retour foireux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    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
    Bash 4.2.37
    Et pour être sûr de ne pas me tromper, j'ai fait des copier/coller de tes lignes.

    Ça doit être une histoire de buffer ou similaire, parce que si j'enlève la première ligne, la deuxième (qui est maintenant la 1re est bonne) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    # mapfile -C xx -c 1 -t UU <fic3.txt
    0 0 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 1 6 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

    EDIT :
    Et en générant trois lignes bien similaires (tous les nombres sur 2 chiffres, intitulés des lignes supprimés) pour comparer d'un coup d'œil, on obtient ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    # cat ficp.txt 
     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 A46 A47 A48 A49 A50 A51 A52 A53 A54 A55 
     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 B46 B47 B48 B49 B50 B51 B52 B53 B54 B55 
     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 C46 C47 C48 C49 C50 C51 C52 C53 C54 C55
    # mapfile -C xx -c 1 -t UU < ficp.txt 
    0 0  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 A46 A47 A48 A49 A50 A51 A52 A53 A54 A55 
    0 1 29 B30 B31 B32 B33 B34 B35 B36 B37 B38 B39 B40 B41 B42 B43 B44 B45 B46 B47 B48 B49 B50 B51 B52 B53 B54 B55 
    0 2  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 C46 C47 C48 C49 C50 C51 C52 C53 C54 C55
    /EDIT
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #3
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 276
    Points : 12 721
    Points
    12 721
    Par défaut
    Désolé, pourtant, j'essaye de faire attention à l'orthographe... je ferais attention la prochaine fois avec le verbe appellationner

    Bon, blague à part, ce qui est intéressant ici, c'est que l'on obtient exactement la même désynchronisation, ce qui me fait fortement douter à un problème de buffer système, ça sent vraiment le bug.
    Cordialement.

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 378
    Points
    19 378
    Par défaut
    Bonjour,

    un bug bash ? bashbug !
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 725
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 725
    Points : 15 125
    Points
    15 125
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Désolé, pourtant, j'essaye de faire attention à l'orthographe...
    C'est la faute à cet internet tout pourri qui nous cerne de toutes parts, plein d'horreurs, de fautes, de tout et n'importe quoi, et ça déteint, ça se répand, c'est triste...

    Citation Envoyé par disedorgue Voir le message
    Bon, blague à part, ce qui est intéressant ici, c'est que l'on obtient exactement la même désynchronisation, ce qui me fait fortement douter à un problème de buffer système, ça sent vraiment le bug.
    J'ai fait la manip (dingue ) suivante : enlever un certain nombre de caractères, identique sur chacune des trois lignes, et j'ai lancé ta commande.
    Ça donne ça (ça commence avec fica.txt à qui j'ai enlevé A45 B45 C45) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    # mapfile -C xx -c 1 -t UU <fica.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 
    0 1  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 
    0 2 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
    # mapfile -C xx -c 1 -t UU <ficb.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 
    0 1  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 
    0 2  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
    # mapfile -C xx -c 1 -t UU <ficc.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 
    0 1  B20 B21 B22 B23 B24 B25 B26 B27 B28 B29 B30 B31 B32 B33 B34 B35 B36 B37 B38 B39 B40 B41 B42 
    0 2 7 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
    # mapfile -C xx -c 1 -t UU <ficd.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 
    0 1  B21 B22 B23 B24 B25 B26 B27 B28 B29 B30 B31 B32 B33 B34 B35 B36 B37 B38 B39 B40 B41 
    0 2 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
    # mapfile -C xx -c 1 -t UU <fice.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 
    0 1  B25 B26 B27 B28 B29 B30 B31 B32 B33 B34 B35 B36 B37 
    0 2 C18 C19 C20 C21 C22 C23 C24 C25 C26 C27 C28 C29 C30 C31 C32 C33 C34 C35 C36 C37
    # mapfile -C xx -c 1 -t UU <ficf.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 
    0 1  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 
    0 2 7 C8 C9 C10 C11 C12 C13 C14 C15 C16 C17 C18 C19 C20 C21 C22 C23 C24 C25 C26
    # mapfile -C xx -c 1 -t UU <ficg.txt
    0 0 Premiere ligne A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 A15 
    0 1  B15 
    # mapfile -C xx -c 1 -t UU <fich.txt
    0 0 Premiere ligne A1 A2 A3 A4 A5 A6 A7 
    # mapfile -C xx -c 1 -t UU <ficj.txt
    0 0 Premiere ligne A1 A2
    Très curieux de constater qu'au plus j'en ai enlevé, au moins il y en avait d'affiché
    Regarde ci-dessus la sortie de ficj.txt, et son contenu dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Premiere ligne A1 A2 
    Deuxieme ligne B1 B2 
    Trosieme ligne C1 C2
    (Trosieme sans "i" pour un bon alignement vertical, oui !)

    Et rajouter des caractères dans le fichier n'améliore pas les choses,

    Tu devrais nous faire une explication de texte caractère par caractère de ta ligne de commande (flemme de lire le man)
    Bon courage !
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  6. #6
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 276
    Points : 12 721
    Points
    12 721
    Par défaut
    Le pire, c'est que si on modifie la fonction xx pour qu'elle appelle le mapfile au travers un tuyau (donc création d'un sous shell), alors le problème disparaît mais on perd le tableau TT:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xx(){ echo "$@" | mapfile -C yy -c 1 -t TT ; }
    Pour l'explication du code:
    Par défaut mapfile lit l'entrée standard et ici les paramètres utilisés sont:
    -C <fonction_a_appeler>.
    -c <n> : la fonction définie dans -C sera appelée toutes les n lignes (donc ici dans les 2 cas, à toutes les lignes)
    -t : ça, c'est juste pour ne pas capturer le retour à la ligne ("\n") de chaque ligne.
    Et le paramètre final, est le tableau dans lequel on souhaite mettre chaque ligne, si on ne le spécifie pas, alors le tableau sera MAPFILE.

    Sinon, mapfile, lorsqu'il appelle une fonction, il lui fourni en paramètre le n° d'indexe du tableau en cours de traitement et toute la ligne qu'il mettra dans le tableau au retour de la fonction.
    C'est la raison des nombres qui s'affiche au début de chaque ligne:
    0 0
    0 1
    0 2
    La colonne de 0 est le mapfile appelant yy et l'autre colonne est le mapfile appelant xx.
    Cordialement.

  7. #7
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 276
    Points : 12 721
    Points
    12 721
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Bonjour,

    un bug bash ? bashbug !
    Je viens de le signaler, mais comme mon anglais est plus qu'inexistant, on verra ce que cela donne...
    Cordialement.

  8. #8
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 276
    Points : 12 721
    Points
    12 721
    Par défaut
    Suite à une discussion via mail interposé avec un developpeur de bash, j'ai fait un test sous bash 4.4.12 mais sous cygwin, et là tout fonctionne bien.

    Est-ce que quelqu'un a les moyens de tester avec la même version de bash mais sous linux afin de confirmer ?
    Cordialement.

  9. #9
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 378
    Points
    19 378
    Par défaut
    je suis sur GNU bash, version 4.4.23(1)-release (x86_64-unknown-linux-gnu), et le comportement est identique à ce qui est décrit ici.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  10. #10
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    [18:35:33 ~/travail]$ bash --version
    GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu)
    Copyright (C) 2016 Free Software Foundation, Inc.
    Licence GPLv3+ : GNU GPL version 3 ou ultérieure <http://gnu.org/licenses/gpl.html>
     
    Ceci est un logiciel libre ; vous être libre de le modifier et de le redistribuer.
    AUCUNE GARANTIE n'est fournie, dans les limites permises par la loi.
    [18:35:44 ~/travail]$ xx(){ mapfile -C yy -c 1 -t TT < <(echo "$@") ; }
    [18:37:02 ~/travail]$ yy(){ echo "$@" ;}
    [18:37:13 ~/travail]$ 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
    [18:37:37 ~/travail]$ echo -e "Premiere ligne" A{1..45} "\nDeuxieme ligne" B{1..45} "\nTroisieme ligne" C{1..45} >fic.txt
    [18:38:00 ~/travail]$ 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
    [18:38:14 ~/travail]$
    Réalisé dans un émulateur de terminal xterm.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  11. #11
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 725
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 725
    Points : 15 125
    Points
    15 125
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Réalisé dans un émulateur de terminal xterm.
    Pareil dans une machine virtuelle basée sur Debian 9 (et donc bash 4.4.12(1))
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  12. #12
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 276
    Points : 12 721
    Points
    12 721
    Par défaut
    Bon, en fait, le souci est lié au rafraîchissement du tampon utilisé par mapfile: le fait d'utiliser des mapfile imbriqués fait que les tampons sont écrasé par les mapfile suivants.

    Et ceci ne se produit que sur des fichiers "seekable" car dans les autres cas le système ne peut faire qu'une lecture ligne à ligne donc les tampons ne seront pas pré-rempli en avance.

    Au dire du développeur, il n'est pas "safe" d'utiliser des mapfile imbriqués.
    Et d'ailleurs, je pense que cela fonctionne sous cygwin car les commandes passe par un wrapper qui fait que les fichiers ne sont pas vu "seekable".

    En espérant qu'un jour on pourra...

    Pour l'heure, pour éviter que le fichier soit vu par bash, on peut faire l'appel suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mapfile -C xx -c 1 -t UU < <(echo "$(<fic.txt)")
    Cordialement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 01/10/2017, 00h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo