bogue caché dans un script Le sujet est résolu

Demande d'aide : c'est ici.
Répondre
tony
Membre
Membre
Messages : 401
Inscription : 10 juil. 2023, 00:54
Status : Hors-ligne

salut,
ce bogue n'est pas du tout important mais ce qui m'agace c'est que je ne vois pas où il est. Donc si qq'un a 5 min à perdre ... sinon tant pis.
le script exécuté:

Code : Tout sélectionner

#/!bin/bash
# inode_check

xdg-mime query default inode/directory >> /home/<user>/inode1;
echo $(date +%a%d\ %X)  >> /home/<user>/inode1;
tac /home/<user>/inode1 > /home/<user>/inode2;
sed -i '2 a #'  /home/<user>/inode2;
sed -i '6,7d' /home/<user>/inode2;
sed -i '5,6d' /home/<user>/inode1;
DISPLAY=:0 xterm -e 'cd /home/<user>/ && cat inode2 ; bash'  --> simplifiée en 'cat /home/<user>/inode2; bash'
en appelant:
  • I1= contenu de inode1 et I2= contenu de inode2
  • 1= résultat de la commande xdg-mime query default inode/directory et 2= résultat de echo $(date +%a%d\ %X)
les sorties I1 et I2 devraient être, en partant de fichiers vides:
I1= (1,2) et I2= (2,1) > (2,1#)
I1= (1,2,1,2) et I2=(2,1,2,1) > (2,1,#,2,1)
I1=(1,2,1,2,1,2) et I2=(2,1,2,1,2,1) > (2,1,#,2,1,2,1) > (2,1#2,1) et en fait j'obtiens (2,1,#,1,2) = ??? et à partir de là l'ordre se répète.
une inversion, qui a tout l'air d'être stable en plus, se produit, mais où?
Debian 12/ Xfce
tony
Membre
Membre
Messages : 401
Inscription : 10 juil. 2023, 00:54
Status : Hors-ligne

problème résolu mais non compris= à la 2ème exécution du script il s'introduit une ligne blanche dans le fichier inode1 par suppression très probable de la ligne "date". Pourquoi= mystère n°1. Ce fichier ne comportant alors que 3 lignes au lieu de 4 provoque une erreur....qui reste la même à partir de la 3ème exécution. Pourquoi= mystère n°2. Pour connaître le moment exact où cette ligne apparaît il me faudrait exécuter le script initial ligne par ligne tout en surveillant le contenu de inode1, peut-être que... Il doit bien exister un automatisme qui fait ça, non? Un autre script je suppose.

Donc le remède/contournement consiste à rajouter une ligne au script qui supprime les lignes blanches dans le fichier inode1:

Code : Tout sélectionner

#/!bin/bash
# inode_check

xdg-mime query default inode/directory >> /home/mmas/inode1;
echo $(date +%a%d\ %X)  >> /home/mmas/inode1;
tac /home/mmas/inode1 > /home/mmas/inode2;
sed -i '2 a #'  /home/mmas/inode2;
sed -i '6,7d' /home/mmas/inode2;
sed -i '/^$/d' /home/mmas/inode1;
sed -i '5,6d' /home/mmas/inode1;
DISPLAY=:0 xterm -e 'cat /home/mmas/inode2 ; bash' 
et là il fonctionne comme attendu.

PS1: j'ai testé en remplaçant la ligne fautive, soit sed -i '5,6d' /home/mmas/inode1; par un équivalent qui utilise la commande "awk", le même problème se produit.

PS2: ce pb apparaît parce que, pour une meilleure lisibilité, je veux mettre une séparation # entre 2 résultats. Si j'enlève cette ligne le script fonctionne très bien. Le bogue est donc dans la manière dont j'ai écrit le script pour avoir cette séparation.

PS3: le bogue comme souvent c'est l'apprenti assis entre la chaise et le clavier. Confirmé une fois encore= erreur dans "sed -i '5,6d' ..." qui doit être écrit "sed -i "4,5d'..." et tout fonctionne.... :icon_mad: pff...
Debian 12/ Xfce
Répondre