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 :

Commande sort : comportement étrange !?


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    babasseur
    Inscrit en
    Janvier 2023
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : babasseur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2023
    Messages : 24
    Par défaut Commande sort : comportement étrange !?
    Salut.

    Voici un petit code à exécuter:
    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
    #!/bin/bash
     
    /bin/bash --version
    echo
    echo
     
    fic='./test.txt'
     
    rm $fic
     
    echo 'La Mort En Ligne (2003).avi' >> $fic
    echo 'LA Panthere Rose (2006).mkv' >> $fic
    echo 'LA Panthere Rose 2 (2009).mkv' >> $fic
    echo 'la Petite Boutique Des Horreurs (1960).mkv' >> $fic
    echo 'LA Proie D Une Ombre (2021).mkv' >> $fic
    echo 'la Lettre Inachevee (1960)' >> $fic
    echo 'La Maison Des Damnés (1973)' >> $fic
    echo 'Lamb (2021).avi' >> $fic
     
     
    echo '---------- cat du fichier '$fic
    cat $fic
    echo "------------------------------"
    echo 
    echo '---------- sort du fichier '$fic
    sort $fic
    echo "------------------------------"
    J'obtiens en sortie (comme vous ?) les lignes suivantes:

    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
     
    GNU bash, version 5.0.17(1)-release (x86_64-redhat-linux-gnu)
    Copyright (C) 2019 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.
     
     
    ---------- cat du fichier ./test.txt
    La Mort En Ligne (2003).avi
    LA Panthere Rose (2006).mkv
    LA Panthere Rose 2 (2009).mkv
    la Petite Boutique Des Horreurs (1960).mkv
    LA Proie D Une Ombre (2021).mkv
    la Lettre Inachevee (1960)
    La Maison Des Damnés (1973)
    Lamb (2021).avi
    ------------------------------
     
    ---------- sort du fichier ./test.txt
    la Lettre Inachevee (1960)
    La Maison Des Damnés (1973)
    Lamb (2021).avi
    La Mort En Ligne (2003).avi
    LA Panthere Rose (2006).mkv
    LA Panthere Rose 2 (2009).mkv
    la Petite Boutique Des Horreurs (1960).mkv
    LA Proie D Une Ombre (2021).mkv
    ------------------------------
    C'est super bizarre !!!! Tout se passe comme si sort ne tenait aucun compte ni des espaces, ni des majuscules et minuscules !
    J'utilise cette commande depuis que Linux existe (eh oui je suis plus tout jeune snif), je n'avais jamais remarqué ça.
    Pour moi, ce n'est pas du tout le comportement attendu.

    Qu'en pensez-vous ? Comment expliquez vous ça ? Comment rétablir un comportement "normal" de ma commande sort, le cas échéant.
      0  0

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LC_COLLATE=C sort -f tonFichier
    mais je ne sais plus le pourquoi du LC_COLLATE
    quant au -f, c'est pour ne pas tenir de la casse; là, c'est toi qui voit.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.
      0  0

  3. #3
    Membre averti
    Homme Profil pro
    babasseur
    Inscrit en
    Janvier 2023
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : babasseur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2023
    Messages : 24
    Par défaut
    Si j'en crois cette page, voici ce que fait LC_COLLATE:
    https://unix.stackexchange.com/quest...fore-uppercase

    Autrement dit si je comprends bien ça inverse le comportement par défaut vis à vis des min et des maj.

    Mais ça n'explique pas le comportement actuel de ma commande qui ne tient pas compte des espaces, et ignore complètement les min et les maj.
    Ce nest pas sensé être son comportement par défaut !
      0  0

  4. #4
    Membre averti
    Homme Profil pro
    babasseur
    Inscrit en
    Janvier 2023
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : babasseur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2023
    Messages : 24
    Par défaut
    OK avec
    j'ai l'impression que je retombe plus ou moins sur mes pieds, mais j'ai un peu de mal à comprendre encore ce que fait l'option -d (ordre du dico), et j'ai peur que tout ça ait des implications si je combine la sortie de sort avec une commande uniq (typiquement).

    Va falloir faire des p*tains de tests, et ça me fait grmbl grmbl.

    De toute façon pour moi cette histoire de LC_ALL ou LC_COLLATE est clairement un bug.
    Si on veut ignorer la casse, l'option -f, --ignore-case est sensée justement servir à ça. Alors que là par défaut cette option ne sert à rien à du tout ! (sauf si la page de manuel est mensongère)

    Les développeurs de bash finissent par faire n'importe quoi à force de pseudo améliorations, ce qui provoque des bugs surprise de version en version.
    Chuis pas content !!!

    Merci à toi N_BaH de m'avoir mis sur la piste.

    Je ne passe pas le sujet en [résolu] dans l'immédiat, j'attends éventuellement d'autres commentaires.
      0  0

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    sort, ce n'est pas bash : c'est GNUcoreutils.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.
      0  0

  6. #6
    Membre averti
    Homme Profil pro
    babasseur
    Inscrit en
    Janvier 2023
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : babasseur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2023
    Messages : 24
    Par défaut
    Oui en plus, je n'avais pas réalisé qu'il s'agit de variables d'environnement.
    Merci à toi.
    Je me suis énervé tout seul.
      0  0

  7. #7
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    Par défaut
    Bonjour

    Ce n'est pas nouveau et c'est très gênant. Quand tes lignes commencent par 2 champs numériques, il les concatène dans un tri numérique. Ce qui oblige à introduire une séparation artificielle, comme un "M" par exemple. Ce n'est effectivement pas le comportement que l'on souhaite par défaut.
      0  0

Discussions similaires

  1. [PowerShell] Comportement étrange d'un output d'une commande.
    Par Sithx dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 13/10/2020, 23h36
  2. Réponses: 9
    Dernier message: 22/11/2011, 11h26
  3. comportement étrange d'une jointure ...
    Par amenis dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 10/02/2005, 21h27
  4. [Système][Runtime][Exec] Comportement étrange au lancement de BeSweet
    Par divxdede dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 06/06/2004, 09h54
  5. Réponses: 2
    Dernier message: 22/09/2003, 11h23

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