While et comparaison

Signaler
Messages postés
112
Date d'inscription
jeudi 24 septembre 2009
Statut
Membre
Dernière intervention
7 janvier 2021
-
Messages postés
112
Date d'inscription
jeudi 24 septembre 2009
Statut
Membre
Dernière intervention
7 janvier 2021
-
Bonjour,

Mon code
#!/bin/bash
set -vx
STATUS="Inprogress"

while  [ "$STATUS" == "Inprogress" ]
do
  sleep 3
  STATUS=`cat fichier.log | tail -1 |awk -F'.' '{ print $NF }'
done


# STATUS 
donne bien inprogress` et pourtant la boucle sort immédiatement.

Quand je remplace
cat fichier.log | tail -1 |awk -F'.' '{ print $NF }'
par
"In Progress"
, ça fonctionne , je reste dans la boucle.
help! :-)

Résultat en mode debug

+ '[' 'In progress' == 'In progress' ']'
+ sleep 3
cat fichier.log | tail -1 |awk -F'.' '{ print $NF }'
++ tail -1
++ awk -F. '{ print $NF }'
++ cat /slpifrfm5sia01/data/ADMINISTRATION/FE8/LOG/swbcfrdie234_2021-01-05.InstantRecover.log
+ STATUS='In progress'
+ '[' 'In progress' == 'In progress' ']'


A noter que le fond du résultat du
"cat..."
est en vert.

Merci de votre aide

5 réponses

Messages postés
36265
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
17 janvier 2021
5 847
Salut,
STATUS=`cat fichier.log | tail -1 |awk -F'.' '{ print $NF }'
Déjà ça tu pourrais le réduire à
STATUS=$(awk -F'.' ' END { print $NF }'  fichier.log)


En plus les quotes inverses sont dépréciées et quasiment illisibles, d'ailleurs je crois qu'il manque la fermante à la fin de ta ligne ;-\

Si ça ne vient pas de là, regarde s'il n'y aurait pas un espace (ou caractère exotique non-imprimable) à la fin de ton fichier de log.


Messages postés
112
Date d'inscription
jeudi 24 septembre 2009
Statut
Membre
Dernière intervention
7 janvier 2021

Bonjour,

Quand je fais un vi du fichier log, la dernière ligne du fichier log affiche:
Traitement.....^[[1;32;40mIn progress^[[0m

Je pense que qu'il faut que je me débarrasse de toutes les mises en forme autour de "In progress"

donc je voudrais remplacer ^[[1;32;40mIn progress^[[0m par In progress
Messages postés
112
Date d'inscription
jeudi 24 septembre 2009
Statut
Membre
Dernière intervention
7 janvier 2021

Je mets à résolu car le besoin ne correspond plus au titre. J'ouvre un nouveau sujet.
Messages postés
36265
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
17 janvier 2021
5 847
Autre chose, entre Inprogress et In progress c'est déjà plus la même chose (espace) ;-(
Messages postés
112
Date d'inscription
jeudi 24 septembre 2009
Statut
Membre
Dernière intervention
7 janvier 2021

En fait, non, j'ai toujours le même problème. Désolé pour la confusion et Oui, c'est bien "In progress" (mauvais copié/coller)
Messages postés
112
Date d'inscription
jeudi 24 septembre 2009
Statut
Membre
Dernière intervention
7 janvier 2021

la dernière ligne du fichier log

swbcfrdie234 - Snapshot download from SCALITY to RUBRIK - SNAPSHOT ID: 7ccea7ff-74b9-436f-b261-5655fa7eda9d .................^[[1;32;40mIn progress^[[0m


Mon code qui ne fonctionne toujours pas.

#!/bin/bash
set -vx
STATUS="In progress"
while [ "$STATUS" == "In progress" ]
do
STATUS=$(awk -F'.' ' END { print $NF }' fichier.log | sed 's/.*\(In.*\)/\1/' | sed 's/\(.*\)^.*/\1/')
done


DEbug
+ '[' 'In progress' == 'In progress' ']'
+ sleep 3
++ sed 's/.*\(In.*\)/\1/'
++ sed 's/\(.*\)^.*/\1/'
++ awk -F. ' END { print $NF }' fichier.log
+ STATUS='In progress'
+ '[' 'In progress' == 'In progress' ']'

je ne pige pas...
Messages postés
112
Date d'inscription
jeudi 24 septembre 2009
Statut
Membre
Dernière intervention
7 janvier 2021

Je confirme que c'est bien une histoire de caratères spéciaux dans le fichier log car quand je remplace dans le fichier log ^[[1;32;40mIn progress^[[0m par In progress, ça fonctionne.