Bash : écrire 2 types de données ds un fichier
Résolujee pee Messages postés 41512 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
Je dispose d'une application dont l'exécution réalise des affichages sur ma console.
Je souhaite pouvoir récupérer le contenu de ces affichages dans un fichier ainsi
que le temps d'exécution de cette application.
Je sais faire l'un, l'autre, mais pas les deux en même temps :-(
Pour récupérer les données je passe par
./monapplication > fichierDeDestination
pour les temps d'exécution :
start=$(date +%s%N) ./monapplication end=$(date +%s%N)
Or j'ai dans l'idée que si je combine les 2 manipulations, j'ajoute à mon temps d'exécution de l'application le délai dû à l'écriture dans fichierDeDestination.
Du coup ma dernière idée en date c'était de tenter un intermédiaire de type
start=$(date +%s%N) ./monapplication << CALCUL > fichierDeDestination end=$(date +%s%N) CALCUL $((end-start)) >> fichierDeDestination
Comme je suis ici ... ça signifie que ça ne fonctionne pas
Auriez-vous des suggestions?
Merci d'avance
Windows / Firefox 109.0
- Bash : écrire 2 types de données ds un fichier
- Bingo bash - Télécharger - Divers Jeux
- Bash list ✓ - Forum Shell
- Bash permission non accordée - Forum Shell
- Bash pause ✓ - Forum Shell
- Bash addition - Forum Programmation
1 réponse
Bonjour,
Je ne vois pas ce que tu veux faire ni à quoi correspond CALCUL. Cette syntaxe signifie que le stdin pour monapplication est pris dans le script lui même, toutes les lignes jusqu'au label de fin CALCUL.
La ligne end=... ne va pas être exécutée par le shell, puisque considérée comme donnée à fournir au programme en cours d'exécution, et pas utilisée, puisque l'on peut supposer que monapplication ne requiert pas d'input.
Sur le fond de ton problème, moi je dirais que le temps d'affichage sur la console est supérieur à l'enregistrement des lignes dans un fichier. Et si tu veux un temps d'exécution pur, il faudrait que le programme ne fasse pas d'écritures en sortie.
Tu pourrais tout simplement faire :
start=$(date +%s%N) ./monapplication >fichierDeDestination end=$(date +%s%N) echo Temps $start $end $((end-start)) >> fichierDeDestination
Bonjour jee pee,
J'ai assez vite compris en effet que l'écriture de ma dernière version ne faisait pas grand sens (sinon que celui d'essayer de manipuler des variables à un endroit où je n'ai pas le droit de le faire visiblement.
Après réflexion, ta suggestion -- que je ne souhaitais pas mettre en place -- est applicable dans mon cas de figure.
Donc je prendrai en tant que tel.
Pour la notion d'exécution pure, malheureusement le programme exécuté n'est pas de mon ressort, mais je te rejoins là dessus. Je le considérerai comme un biais de temps de calcul (maximisé).
Merci !
tu pourrais évaluer 3 situations, le temps d’exécution avec un fichier de sortie, le temps d’exécution à l’écran, et le temps d'exécution avec un >/dev/null