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 :

Expressions rationnelles, besoin d'un coup de main pour lister des partitions


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 131
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 131
    Par défaut Expressions rationnelles, besoin d'un coup de main pour lister des partitions
    Bonjour,

    pour moi c'est le brouillard et au plus je lis des pages au plus je m'y enfonce...

    donc, désolé de vous déranger, mais quand j'exécute dans un terminal
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    parts=$(blkid /dev/nbd*)
    printf '%s\n' "${parts[@]}"
    après avoir connecté un disque virtuel formaté avec 4 partoches et l'avoir bien monté avec qemu-nbd, j'obtiens ça,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    /dev/nbd0p1: LABEL="25mo" UUID="9d75ee8c-97cf-40b6-9e6a-308e44e6dc22" TYPE="ext4" 
    /dev/nbd0p2: LABEL="15mo" UUID="6f2e4fd4-9e0a-46fa-aebb-83c90e94f679" TYPE="ext4" 
    /dev/nbd0p3: LABEL="12mo" UUID="7f5fd0e0-6adf-4cfd-977b-67a254f275a3" TYPE="ext4" 
    /dev/nbd0p4: LABEL="07mo" UUID="b4944abf-684e-45ad-9807-1e8e76d577c0" TYPE="ext4"
    qui est exactement ce que je veux, mais comment le faire fonctionner dans un script ?
    Car à l'heure actuelle, le retour est vide de chez vide, et c'est juste 1 ligne, pas 4.

    Une piste (qui ne m'amuse pas) : quand j'exécute la même chose avec fdisk, soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    parts=$(fdisk -l "$dvn"*) 
    printf '%s\n' "${parts[@]}"
    ça fonctionne mais c'est difficilement utilisable, fdisk étant très (trop !) verbeux sur ce coup-là.
    (Et $dvn c'est /dev/nbd, dvn pour /DeV/Nbd),

    En rajoutant echo $? après parts=... je récupère un 2 et le man nous explique que
    Citation Envoyé par man blkid
    If the specified token was not found, or no (specified) devices could be identified, an exit code of 2 is returned.
    Est-ce à dire qu'il y aurait un souci avec blkid ? Ou dans la commande avec l'astérisque ? Dans le terminal, j'ai ça, sans astérisque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ blkid /dev/nbd0
    $ echo $?
    2
    $ blkid /dev/nbd0p1
    /dev/nbd0p1: LABEL="25mo" UUID="9d75ee8c-97cf-40b6-9e6a-308e44e6dc22" TYPE="ext4" 
    $ echo $?
    0
    Merci à tous, au plaisir de vous lire...

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

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

    parts n'est pas un tableau.
    et * n'est pas une regex, c'est un Développement des chemins.

    utilise ceci plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mapfile -t parts < <(blkid /dev/nbd*)
    printf '%s\n' "${parts[@]}"
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 131
    Par défaut
    J'ai tenté ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    mapfile -t parts < <(blkid /dev/nbd*)
    ret=$?; echo $ret
    printf '%s\n' "${parts[@]}"
    mais tout ce que je gagne c'est un 0 à l'echo $ret...


    PS : en terminal ça fonctionne,

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

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

    Change d'outil. lsblk.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lsblk -o KNAME,MOUNTPOINT,SIZE,UUID,FSTYPE
    Colonnes disponibles (pour --output)*:
            NAME  nom du périphérique
           KNAME  nom du périphérique interne du noyau
         MAJ:MIN  numéro majeur:mineur du périphérique
          FSTYPE  type de système de fichiers
      MOUNTPOINT  où le périphérique est monté
           LABEL  étiquette du système de fichiers
            UUID  UUID du système de fichiers
        PARTTYPE  type de partition UUID
       PARTLABEL  étiquette de partition
        PARTUUID  UUID de partition
       PARTFLAGS  indicateurs de la partition*
              RA  avance en lecture («*readahead*») du périphérique
              RO  périphérique en lecture seule
              RM  périphérique amovible
         HOTPLUG  périphérique amovible ou connectable à chaud (USB, PCMCIA,*etc.)
           MODEL  identifiant de périphérique
          SERIAL  numéro de série du disque
            SIZE  taille du périphérique
           STATE  état du périphérique
           OWNER  nom d'utilisateur
           GROUP  nom de groupe
            MODE  permissions de nœud de périphérique
       ALIGNMENT  index d'alignement
          MIN-IO  taille minimale d'E/S
          OPT-IO  taille optimale d'E/S
         PHY-SEC  taille de secteur physique
         LOG-SEC  taille de secteur logique
            ROTA  périphérique tournant
           SCHED  ordonnanceur d'E/S
         RQ-SIZE  demande de taille de la file
            TYPE  type de périphérique
        DISC-ALN  abandon de l'index d'alignement
       DISC-GRAN  abandon de la granularité
        DISC-MAX  abandon du maximum d'octets
       DISC-ZERO  abandon des données de zéros
           WSAME  écriture du même maximum d'octets
             WWN  identifiant de stockage unique
            RAND  ajout d'aléa
          PKNAME  nom du périphérique parent interne du noyau
            HCTL  Hôte:Canal:Cible:Ulog pour SCSI
            TRAN  type de périphérique de transport
      SUBSYSTEMS  dédupliquer une chaîne de sous-systèmes
             REV  révision de périphérique
          VENDOR  constructeur du périphérique
    
    Consultez lsblk(8) pour obtenir des précisions complémentaires.
    

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 131
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Bonjour

    Change d'outil. lsblk.
    Moui, avec un grep derrière, pour n'avoir que les lignes qui m'intéressent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     lsblk -o KNAME,MOUNTPOINT,SIZE,UUID,FSTYPE | grep nbd
    nbd0                  60M                                      
    nbd0p1                25M 9d75ee8c-97cf-40b6-9e6a-308e44e6dc22 ext4
    nbd0p2                15M 6f2e4fd4-9e0a-46fa-aebb-83c90e94f679 ext4
    nbd0p3                12M 7f5fd0e0-6adf-4cfd-977b-67a254f275a3 ext4
    nbd0p4                 7M b4944abf-684e-45ad-9807-1e8e76d577c0 ext4
    J'en ai même une en plus, la première. Vais étudier ça...

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 659
    Par défaut
    le grep n'est vraiment pas indispensable.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ mapfile -s1 -t parts < <(lsblk -n -o KNAME,MOUNTPOINT,SIZE,UUID,FSTYPE /dev/sda)
    edit: le problème de cette façon de faire (commande | mapfile), c'est que le tableau n'existe pas en dehors du pipe.
    c'est pourquoi j'utilise une Substitution de processus (<(commande)).
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 131
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    edit: le problème de cette façon de faire (commande | mapfile), c'est que le tableau n'existe pas en dehors du pipe.
    c'est pourquoi j'utilise une Substitution de processus (<(commande)).
    Tu as bien fait de revenir là-dessus, j'ai réussi à la faire fonctionner ! :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ mapfile -t toto < <(blkid /dev/nbd*)
    $ printf '%s\n' "${toto[@]}"
    /dev/nbd0p1: LABEL="25mo" UUID="9d75ee8c-97cf-40b6-9e6a-308e44e6dc22" TYPE="ext4" 
    /dev/nbd0p2: LABEL="15mo" UUID="6f2e4fd4-9e0a-46fa-aebb-83c90e94f679" TYPE="ext4" 
    /dev/nbd0p3: LABEL="12mo" UUID="7f5fd0e0-6adf-4cfd-977b-67a254f275a3" TYPE="ext4" 
    /dev/nbd0p4: LABEL="07mo" UUID="b4944abf-684e-45ad-9807-1e8e76d577c0" TYPE="ext4"
    Plus qu'à s'atteler au nombre de lignes (de partitions) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ IFS='\r'; k=0; for i in ${toto[@]}; do let k++; done; echo "nombre de lignes : "$k
    nombre de lignes : 4
    EDIT : MAIS IL RESTE UN AFFREUX SOUCI : ça ne fonctionne pas dans un script, cette ligne $ mapfile -t toto < <(blkid /dev/nbd*) à cause de l'astérisque ! Allez hop !, retour à la case départ, enfin, au post # 1...

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 131
    Par défaut
    Ne voulant pas rester sur un échec avec mapfile, j'ai un peu fouillé le web, ai trouvé un site sympa et simplissime, ai adapté ses exemples, ce qui donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    blkid /dev/nbd* | ( mapfile -t; printf "%s\n" "${MAPFILE[@]}" )
    /dev/nbd0p1: LABEL="25mo" UUID="9d75ee8c-97cf-40b6-9e6a-308e44e6dc22" TYPE="ext4" 
    /dev/nbd0p2: LABEL="15mo" UUID="6f2e4fd4-9e0a-46fa-aebb-83c90e94f679" TYPE="ext4" 
    /dev/nbd0p3: LABEL="12mo" UUID="7f5fd0e0-6adf-4cfd-977b-67a254f275a3" TYPE="ext4" 
    /dev/nbd0p4: LABEL="07mo" UUID="b4944abf-684e-45ad-9807-1e8e76d577c0" TYPE="ext4"
    et ma foi, ça le fait bien !
    Merci à vous,

    EDIT
    Citation Envoyé par N_BaH Voir le message
    utilise ceci plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf '%s\n' "${parts[@]}"
    Je reviens 5 minutes là-dessus parce que là, il y a un mystère : ces formules cabalistiques ne m'ont jamais donné le nombre de lignes du tableau, pour le connaître il faut compter ! :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    blkid /dev/nbd* | ( IFS='\r'; mapfile -t; k=0; for i in ${MAPFILE[@]}; do let k++; echo "$i"; done; echo "nombre de lignes : "$k )
    et cette petite chose me permet de lire, après les infos des partoches,
    nombre de lignes : 4
    Oui, j'aurais pu mettre nombre de partitions : 4, chacun adaptera en fonction de ses besoins.
    Et attention à tout bien garder sur la même ligne à l'intérieur des parenthèses, oui, cette histoire de parenthèses est obligatoire et ennuyeuse car générant un sous-shell et donc les variables à l'extérieur et à l'intérieur ne se connaissent pas !

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ a="test a"
    $ (a="test b"; echo $a)
    test b
    $ echo $a
    test a
    Et ça c'est mortel quand on est fatigué ! Alors méfiance,

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 131
    Par défaut
    Bonjour,

    ce matin, merci pour vos retours, mais c'est l'enfer...

    Avec la ligne de N_BaH (avec ou sans ":" [pas compris à quoi il servait -- typo ?]), dans les deux cas, des fois ça fonctionne et des fois pas, sans que j'aie pu déterminer pourquoi ce "des fois"…

    Par exemple, je fais tourner ma manière (qui fonctionne à tous les coups) puis je la commente et j'active
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      blkid /dev/nbd* | while read line; do echo "$line"; done;
    j'enregistre, j'exécute, ça fonctionne mais je n'ai pas le nombre de lignes (qui sera intéressant pour la suite), alors je passe à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      k=0; 
      blkid /dev/nbd* | while read line; do let k++; echo "$line"; done; 
      echo "$k"
    qui ne fonctionne pas, résultat vide !
    Je commente première et dernière lignes, ce qui me ramène à ça tout seul :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      blkid /dev/nbd* | while read line; do let k++; echo "$line"; done
    Résultat vide, donc c'est lié à l'ajout de let k++; ? Je le supprime et je relance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      blkid /dev/nbd* | while read line; do echo "$line"; done
    Résultat vide maintenant, alors que ça a fonctionné qq lignes plus haut.

    À ce stade, pour m'en sortir, je commente cette ligne puis décommente ma manière, j'exécute (c'est bon) et je peux la recommenter et continuer à jouer avec le while, jusqu'à la prochaine incongruité.

    Bon, ok, il y a un 'blème bien planqué : après avoir repris le contrôle, je lance la ligne de N_BaH
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      blkid /dev/nbd* | while read line; do echo "$line"; done
    et ça fonctionne bien, alors je rappelle mon script (qui n'a plus rien après à part les fonctions de libération de qemu-nbd et de suppression du module nbd) et il me donne maintenant lui aussi un résultat vide.
    C'est à n'y rien comprendre.
    À tel point que testant carrément à la ligne de commande, je réalise que mon blkid version 2.20.1 est en train de partir en sucette et qu'il va me falloir rebooter, ouais ouais !
    Bougez pas je reviens, en espérant que ça sera plus fiable sur la machine récente pour laquelle ce script est prévu...

    Et pas mieux avec la ligne de disedorgue.


    Ah, mon shebang c'est #!/bin/bash et tout ça c'est pour pouvoir monter facilement des disques virtuels (car j'ai des manips à faire sur des configurations et il sera plus rapide et plus simple pour moi d'éditer le fstab que de recopier les gigas des .vdi, même si en ce moment je perds là-dessus un temps dément...)

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 131
    Par défaut
    Coucou me revoilou, après un reboot, et j'ai lancé le script avec ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      k=0; 
      blkid /dev/nbd* | while read line; do let k++; echo "$line"; done; 
      echo "$k"
    Résultat, 2 lignes au lieu de 4 et un compteur de lignes à 0.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    /dev/nbd0p1: LABEL="25mo" UUID="9d75ee8c-97cf-40b6-9e6a-308e44e6dc22" TYPE="ext4"
    /dev/nbd0p2: LABEL="15mo" UUID="6f2e4fd4-9e0a-46fa-aebb-83c90e94f679" TYPE="ext4"
    0
    alors que si je tape la commande blkid /dev/nbd* dans un terminal, la réponse est bonne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ blkid /dev/nbd*
    /dev/nbd0p1: LABEL="25mo" UUID="9d75ee8c-97cf-40b6-9e6a-308e44e6dc22" TYPE="ext4" 
    /dev/nbd0p2: LABEL="15mo" UUID="6f2e4fd4-9e0a-46fa-aebb-83c90e94f679" TYPE="ext4" 
    /dev/nbd0p3: LABEL="12mo" UUID="7f5fd0e0-6adf-4cfd-977b-67a254f275a3" TYPE="ext4" 
    /dev/nbd0p4: LABEL="07mo" UUID="b4944abf-684e-45ad-9807-1e8e76d577c0" TYPE="ext4"
    Et si je combine avec le comptage
    k=0; blkid /dev/nbd* | while read line; do let k++; echo "$line"; done; echo "$k"j'ai bien les 4 lignes de devices, mais le compteur k reste à 0. Encore une histoire de sous-process ? Confirmé en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ... echo "$line"; echo "$k"; done; echo "$k"
    /dev/nbd0p1: LABEL="25mo" UUID="9d75ee8c-97cf-40b6-9e6a-308e44e6dc22" TYPE="ext4"
    1
    /dev/nbd0p2: LABEL="15mo" UUID="6f2e4fd4-9e0a-46fa-aebb-83c90e94f679" TYPE="ext4"
    2
    /dev/nbd0p3: LABEL="12mo" UUID="7f5fd0e0-6adf-4cfd-977b-67a254f275a3" TYPE="ext4"
    3
    /dev/nbd0p4: LABEL="07mo" UUID="b4944abf-684e-45ad-9807-1e8e76d577c0" TYPE="ext4"
    4
    0
    Si qqun a une idée, moi, là, je suis sec, à part en passant par le fichier temporaire…

  11. #11
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 349
    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 349
    Par défaut
    Dans un sens, ma solution d'utilisation de mapfile peut s'avérer utile, en fait...

    Bon blague à part, tu peux essayer comme ça (en scripting, car en terminal, ça peut être dégueulasse) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    blkid /dev/nbd* | tee >(wc -l)

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 659
    Par défaut
    on te l'a déjà dit : le pipe crée un sous-shell en dehors duquel les variables qui y sont créées n'existent pas et ne sont pas modifiées dans l'environnement parent.
    « un processus enfant ne peut pas altérer son processus parent »

    quant aux lignes qui n'apparaissent pas, je ne sais pas.

    mais pourquoi ne pas utiliser une Substitution de processus (<(...)) ? comme ça pas de pipe, pas de sous-shell...

    PS: le : a plusieurs significations, généralement true.
    dans le contexte, ce true sert de commentaire* à ce qui suit jusqu'au ; suivant.

    * Attention, ce n'est pas un vrai commentaire : les variables peuvent y être modifiées.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 131
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    on te l'a déjà dit : le pipe crée un sous-shell en dehors duquel les variables qui y sont créées n'existent pas et ne sont pas modifiées dans l'environnement parent.
    « un processus enfant ne peut pas altérer son processus parent »
    Je pensais que c'était réservé aux parenthèses,

    Citation Envoyé par N_BaH Voir le message
    quant aux lignes qui n'apparaissent pas, je ne sais pas.
    mais parce que c'est un gros foutoir, le scripting, je ne vois que ça...

    Qu'on me comprenne bien. Jusqu'à présent (parce que ça vient de changer, lire + bas) j'ai ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      tempfic=$(mktemp /tmp/test.XXX) 
      blkid /dev/nbd* | ( mapfile -t; k=0; for i in "${MAPFILE[@]}"; do let k++; echo "$i" >> $tempfic; done; echo "$k" >> $tempfic )
      cat $tempfic
    et ça me donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      avec blkid :
    /dev/nbd0p1: LABEL="25mo" UUID="9d75ee8c-97cf-40b6-9e6a-308e44e6dc22" TYPE="ext4" 
    /dev/nbd0p2: LABEL="15mo" UUID="6f2e4fd4-9e0a-46fa-aebb-83c90e94f679" TYPE="ext4" 
    /dev/nbd0p3: LABEL="12mo" UUID="7f5fd0e0-6adf-4cfd-977b-67a254f275a3" TYPE="ext4" 
    /dev/nbd0p4: LABEL="07mo" UUID="b4944abf-684e-45ad-9807-1e8e76d577c0" TYPE="ext4" 
    4
    Mais je réalise, en passant à l'étape suivante, que je n'ai pas besoin du nombre de lignes (le 4 juste dessus), je vais donc le calculer après avec
    k=0; while read champ1 et_le_reste; do echo "${champ1%:}"; let k++; done < "$tempfic" ; echo "$k" et ça donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    /dev/nbd0p1
    /dev/nbd0p2
    /dev/nbd0p3
    /dev/nbd0p4
    4
    Exactement ce que je veux.
    Donc je modifie la boucle qui chagrine tout le monde en supprimant le comptage des lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      tempfic=$(mktemp /tmp/test.XXX) 
      blkid /dev/nbd* > "$tempfic"
      cat "$tempfic"
    Mais c'est pas terrible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      avec blkid :
    /dev/nbd0p1: LABEL="25mo" UUID="9d75ee8c-97cf-40b6-9e6a-308e44e6dc22" TYPE="ext4" 
    /dev/nbd0p2: LABEL="15mo" UUID="6f2e4fd4-9e0a-46fa-aebb-83c90e94f679" TYPE="ext4" 
    /dev/nbd0p3: LABEL="12mo" UUID="7f5fd0e0-6adf-4cfd-977b-67a254f275a3" TYPE="ext4"
    Je perds la dernière ligne ! Qu'à cela ne tienne, la solution est facile, il me semble :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      tempfic=$(mktemp /tmp/test.XXX) # penser à rm -f $tempfic
      blkid /dev/nbd* > "$tempfic"
      sync
      cat "$tempfic"
    mais non, c'est la cata !
    Rien ! Plus rien !
    Je termine le script, je le relance sans rien changer et là c'est bon.
    Je l'arrête à nouveau, je le relance et c'est de nouveau le pâté !
    Alors que dans un autre terminal, la commande de disedorgue fonctionne toujours très bien (pourquoi dis-tu que "ça peut être dégueulasse" ? Elle est très bien, ta commande !)

    Citation Envoyé par N_BaH Voir le message
    mais pourquoi ne pas utiliser une Substitution de processus (<(...)) ? comme ça pas de pipe, pas de sous-shell...
    On verra, on verra, pour le moment j'en ai trop marre, je vais me balader !
    Et si les keufs me contrôlent, je leur dirai que
    - j'ai besoin de m'aérer le dedans de la tête, vous comprenez, monsieur l'agent, je fais de l'informatique...
    - Ah ok, allez, circulez !

    EDIT : dernière minute avant de plier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      tempfic=$(mktemp /tmp/test.XXX) 
      sync # un autre ici
      blkid /dev/nbd* > "$tempfic"
      sync
      cat "$tempfic"
    Et ça s'est bien exécuté, alleluia !

    À pluche,

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 659
    Par défaut
    c'est un gros foutoir, le scripting, je ne vois que ça...


    le deuxième sync n'a pas d'utilité, il me semble. par contre, celui qui est réalisé avant le blkid lui peut être indispensable.
    du coup, le scripting est innocent !
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 131
    Par défaut
    Yep !

    OMG, tu ressuscites un sujet qui a 18 mois, autant dire une éternité, et après l'avoir (un peu) relu, j'avoue humblement que je ne me souviens plus pourquoi c'était faire !

    Tu vois le truc ?

    Entre de + en + de binaires qui ont de + en + d'options, et l'âge qui passe pour nous bouffer les neurones, on ne peut que s'évanouir face à l'écart qui s'agrandit, jour après jour,

    Mais merci d'y avoir pensé, c'est vrai que j'ai sur mon bureau depuis plus d'un an une note pour penser à étudier findmnt en profondeur. Dès que j'ai 5 minutes, promis !

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/01/2007, 12h35
  2. Réponses: 7
    Dernier message: 23/12/2006, 13h43
  3. [RegEx] Besoin d'un coup de main pour écrire une regex
    Par gaboo_bl dans le forum Langage
    Réponses: 7
    Dernier message: 18/08/2006, 17h53
  4. besoin d'un coup de main pour une requête ;)
    Par Fabouney dans le forum Requêtes
    Réponses: 3
    Dernier message: 14/11/2005, 23h14

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