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 :

Problème avec la commande od (bug?)


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Problème avec la commande od (bug?)
    Bonjour,

    J'utilise le code suivant avec cygwin qui marche presque. Il est présent dans une fonction appelée en boucle.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    liste=(`dd if=$file_in bs=1 skip=$place count=60 2>/dev/null | od -An -tu1`)
    for ((i=0; i < 29; i++))
    do
      fonction $variable1 ${liste[$((i*2))]}
      fonction $variable2 ${liste[$((i*2+1))]}
    done
    J'ai un bug au bout d'un moment (après l'avoir fait plus de 400 fois) ... Voici le contenu des 2 dernier "liste" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    12 8 55 8 32 8 49 8 59 8 120 8 12 8 61 8 57 8 42 8 88 8 88 8 88 8 88 8 88 8 88 8 88 8 88 8 88 8 88 8 88 8 88 8 88 8 88 8 88 8 88 8 88 8 88 8 88 8 88 8
    25 8 54 8 59 8 45 8 90 8 90 8 90 8 90 8 90 8 90 8 90 8 90 8 90 8 90 8 90 8 90 8 resultat_du_ls 90 8 90 8 90 8 90 8 90 8 90 8
    J'ai le nom des fichiers et répertoire présent dans le répertoire courant là où j'ai écrit "resultat_du_ls". Sans le "od -An -tu1" je n'ai pas de bug ...

    Est-ce que ça viendrait de cygwin? J'ai installé un linux via virtualbox mais impossible de partager le répertoire windows avec >_<
    Donc je ne peut pas vérifier ...

    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bon j'ai réussi à faire le test sous un linux via virtualbox (la version de linux que j'avais était incompatible avec le partage de répertoire).
    J'ai exactement le même problème.

    Après quelques test, il s'agirait de certaines lignes qui posent problème.
    J'ai fait le test en commençant à des lignes différentes et je tombe en erreur à chaque fois sur les mêmes.

    Contenu du fichier tmp.data (en hexa):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    19 08 36 08 3b 08 2d 08 5a 08 5a 08 5a 08 5a 08 5a 08 5a 08 5a 08 5a 08 5a 08 5a 08 5a 08 5a 08 5a 08 5a 08 5a 08 5a 08 5a 08 5a 08 5a 08 5a 08 5a 08 5a 08 5a 08 5a 08 5a 08 5a 08
    Partie du script posant problème (j'ai viré tout le reste et testé, j'ai toujours le meme problème)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/bin/bash
     
    fonction () {
    echo dd `dd if=$fichier bs=1 skip=$((place)) count=60 2>/dev/null` >> tmp
    echo od `dd if=$fichier bs=1 skip=$((place)) count=60 2>/dev/null | od -An -tu1` >> tmp
    }
     
    > tmp
    fichier=tmp.data
    place=0
    fonction
    Contenu du fichier tmp créé (il y a des caractère perdu lors du copié-collé sur la 1ère ligne):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dd 6;-ZZZZZZZZZZZZZZZZZZZZZZZZZZ
    od 25 8 54 8 59 8 45 8 90 8 90 8 90 8 90 8 90 8 90 8 90 8 90 8 90 8 90 8 90 8 90 8 extract.sh tmp tmp.data 90 8 90 8 90 8 90 8 90 8 90 8
    Merci à celui qui arrivera à me dépanner parce que là je sèche ...

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 657
    Par défaut
    ?
    ce sont des fichiers créés sous Windows, au format DOS ?
    alors, le problème vient probablement des CR/LF.
    il faudrait convertir les fichiers au format UNIX.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    ?
    ce sont des fichiers créés sous Windows, au format DOS ?
    alors, le problème vient probablement des CR/LF.
    il faudrait convertir les fichiers au format UNIX.
    Il s'agit d'un fichier binaire et passer un dos2unix ne change rien sur le cas présent (ça enlèverait d'ailleurs des caractères à garder dans le fichier final)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ dos2unix tmp.data
    dos2unix: Binary symbol found at line 1
    dos2unix: Skipping binary file tmp.data
    C'est le dernier point qu'il me reste à améliorer dans mon script.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste=(`dd if=$file_in bs=1 skip=$place count=60 2>/dev/null | od -An -tu1`)
    Semble beaucoup plus rapide que de faire 60:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    variable=`dd if=$file_in bs=1 skip=$place count=1 2>/dev/null | od -An -i | sed 's/ //g'`
    Pourtant, le 2ème fonctionne correctement avec le même fichier ...

    Ca devrait pourtant faire la même chose au final?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Si je coupe en séries de 20 caractères je n'ai pas de problèmes ...
    Pourrait-il y avoir un lien avec l'entête du script?
    Avez-vous le même résultat que moi?

    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
    #!/bin/bash
     
    fonction () {
    #echo `dd if=$fichier bs=1 skip=$((place)) count=60 2>/dev/null` >> tmp
    echo -n `dd if=$fichier bs=1 skip=$((place)) count=20 2>/dev/null | od -An -tu1` >> tmp
    echo -n "x" >> tmp
    echo -n `dd if=$fichier bs=1 skip=$((place+20)) count=20 2>/dev/null | od -An -tu1` >> tmp
    echo -n "x" >> tmp
    echo `dd if=$fichier bs=1 skip=$((place+40)) count=20 2>/dev/null | od -An -tu1` >> tmp
    echo `dd if=$fichier bs=1 skip=$((place)) count=60 2>/dev/null | od -An -tu1` >> tmp
    }
     
    > tmp
    echo -en "\x19\x08\x36\x08\x3b\x08\x2d\x08\x5a\x08\x5a\x08\x5a\x08\x5a\x08\x5a\x08\x5a\x08\x5a\x08\x5a\x08\x5a\x08\x5a\x08\x5a\x08\x5a\x08\x5a\x08\x5a\x08\x5a\x08\x5a\x08\x5a\x08\x5a\x08\x5a\x08\x5a\x08\x5a\x08\x5a\x08\x5a\x08\x5a\x08\x5a\x08\x5a\x08" > tmp.data
    fichier=tmp.data
    place=0
    fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    25 8 54 8 59 8 45 8 90 8 90 8 90 8 90 8 90 8 90 8x90 8 90 8 90 8 90 8 90 8 90 8 90 8 90 8 90 8 90 8x90 8 90 8 90 8 90 8 90 8 90 8 90 8 90 8 90 8 90 8
    25 8 54 8 59 8 45 8 90 8 90 8 90 8 90 8 90 8 90 8 90 8 90 8 90 8 90 8 90 8 90 8 extract.sh tmp tmp.data 90 8 90 8 90 8 90 8 90 8 90 8

  6. #6
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 348
    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 348
    Par défaut
    Bonjour,

    En fait, il manque l'option -v à la commande "od" pour que celui-ci ne remplace pas les lignes en doublon par un "*" qui dans le cas du script, le shell transforme en tant que fichiers du répertoire courant.

    Cordialement.

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

Discussions similaires

  1. Probléme avec la commande SendKeys
    Par ProgElecT dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 09/12/2006, 22h24
  2. Problème avec la commande sed
    Par JUSTIN Loïc dans le forum Linux
    Réponses: 2
    Dernier message: 05/09/2006, 10h17
  3. Problème avec la commande nice
    Par ShadoX dans le forum Administration système
    Réponses: 2
    Dernier message: 08/08/2006, 18h59
  4. Problème avec la commande revoke sous oracle
    Par merlubreizh dans le forum Oracle
    Réponses: 19
    Dernier message: 28/04/2006, 15h02
  5. [C++] Problème avec la commande "make"
    Par quantik-revolution dans le forum Systèmes de compilation
    Réponses: 6
    Dernier message: 02/04/2006, 18h17

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