Vous n'êtes pas identifié(e).
lorsque CMD1 passe bien, pas de soucis, mon fichier toto.txt s'incrémente bien
mais j'aimerais que quand CMD1 échoue, j'aie une ligne ND qui s'ajoute
j'ai essayé:
mais ça ne marche pas
Avez vous une idée??
Merci
J
Hors ligne
Dernière modification par otyugh (26-01-2021 17:44:51)
Hors ligne
Hors ligne
Hors ligne
j'ai bien le comportement voulu, mais je n'arrive pas a comprendre pourquoi j'ai du insérer ** || echo suite && **
vous avez une idée?
merci
Hors ligne
Tu pourrais aussi l'écrire avec des if then else fi... quelque chose comme ceci : (Pas testé: à vérifier)
Ou en plus compact : (A vérifier)
.
Dernière modification par Beta-Pictoris (28-01-2021 00:29:18)
Hors ligne
Le souci ici c'est que l'opérateur '||' agit en fonction du code de retour de awk, pas celui de CMD1.
Voici une proposition passant par un code de retour stocké dans une variable, mais il y a sûrement d'autres manières de gérer ça :{ CMD1 ; CMD1_STATUS=$? ; } | awk '{ FS = ":" } ; {ORS="\n"} ; {print $2}' >> toto.txt
[ $CMD1_STATUS -eq 0 ] || printf "%s\n" "ND" >> toto.txt
Oui, avec bash, le tableau PIPESTATUS fournit un code de retour en fonction de la postion dans la pipeline.
.
Dernière modification par Beta-Pictoris (28-01-2021 00:29:25)
Hors ligne
vv222 a écrit :Le souci ici c'est que l'opérateur '||' agit en fonction du code de retour de awk, pas celui de CMD1.
Voici une proposition passant par un code de retour stocké dans une variable, mais il y a sûrement d'autres manières de gérer ça :{ CMD1 ; CMD1_STATUS=$? ; } | awk '{ FS = ":" } ; {ORS="\n"} ; {print $2}' >> toto.txt
[ $CMD1_STATUS -eq 0 ] || printf "%s\n" "ND" >> toto.txt
Oui, avec bash, le tableau PIPESTATUS fournit un code de retour en fonction de la postion dans la pipeline.
.
Avec cette methode je n'ai pas réussi a updater $CMD1_STATUS. Peut etre parce que CMD1 n'est pas une commande bash, mais un executable (j'avais mis CMD1 pour simplifier)
Hors ligne
Tu as écris ceci :
Si le résultat de [ ! -e File1 ] est faux alors si le résultat de "CMD1 File1 | awk '{ FS = ":" } ; {ORS="\t"} ; {print $2}'" est faux alors exécute "echo suite"
Si le résultat de [ ! -e File1 ] est vrai alors exécute "printf "%s\t" "ND""
Tu pourrais aussi l'écrire avec des if then else fi... quelque chose comme ceci : (Pas testé: à vérifier)( if [ ! -e "File1" ]; then
printf "%s\t" "ND"
elif ! CMD1 File1 | awk -F":" '{printf "%s\t" , $2}' ; then
echo suite
fi ) >> toto.txt
Ou en plus compact : (A vérifier)( [ ! -e File1 ] && printf "%s\t" "ND" || CMD1 File1 | awk -F":" '{printf "%s\t" , $2}'; [ ${PIPESTATUS} -ne 0 ] && echo suite ) >> toto.txt
.
oui, j'avais bien pensé à la boucle if effectivement, et en fait, avec cette méthode, pas besoin de la partie
ce que je ne comprends toujours pas, dans ma premiere version, c'est que "echo suite", je ne le vois pas s’exécuter (d'ailleurs j'en ai pas besoin), mais par contre, il est nécessaire pour que "printf "%s\t" "ND" s'exécute
je vais tester ta forme compacte...
Hors ligne
Dernière modification par Beta-Pictoris (28-01-2021 19:01:20)
Hors ligne