7
votes

temps écoulé pour chaque règle

J'ai ce code Bash:

(au début du script :) p> xxx pré>

(et, à la fin du script :) P >

rule1: dep1 dep2 dep3
    ...SOME STUFF
    @$(call TIME, starttime)

rule2: depx depD rule1
    ...SOME STUFF
    @$(call TIME, starttime)


0 commentaires

3 Réponses :


5
votes

Le problème est que dans votre script Bash, la variable t survit depuis le début (avant le travail) à la fin (lorsqu'il peut être soustrait de l'heure de fin). Dans une recette de fabrication, chaque ligne a sa propre coquille, une variable de coque définie dans une ligne précoce ne sera pas disponible dans une ligne ultérieure.

Vous pouvez corder toutes les commandes d'une recette ensemble en une seule ligne. que vous pouvez définir t au début et l'utiliser à la fin, mais c'est assez maladroit. Je vous suggère d'écrire t à un fichier, peut-être règle1_time , de sorte que les deux appels sur minuterie ne nécessitent pas de variable commune. Oh, et n'essayez pas d'utiliser appel à l'intérieur d'une commande: xxx

EDIT:
J'ai écrit le code ci-dessus comme une preuve de concept; J'allais de la clarté, pas de raffinement. Si je comprends votre commentaire correctement, vous voulez maintenant savoir comment décomposer le temps en heures, minutes et secondes, sans appeler plusieurs fonctions de chaque règle. Il y a plusieurs façons de le faire, c'est probablement le plus propre: xxx


3 commentaires

Merci. J'ai fait ta solution mais j'espérais faire quelque chose comme une fonction, plus automatisé. Maintenant, j'ai une fonction (STIME, DTNE, DT, DH, ...) par opération mathématique nécessaire pour les informations finales.


Le calcul H: M: S n'est pas correct car il n'y a pas de moyen simple d'afficher écoulé temps en utilisant date . Les fuseaux horaires et les secondes sautent de la sortie. Il est généralement nécessaire de faire un ensemble de division successif de 60. Sinon, une réponse fantastique. (Commentaire sur un très vieux post, je sais.)


En outre, date -r vous donnera l'horodatage d'un fichier, donc plutôt que d'écrire la date à un fichier, puis de lire son contenu, vous pouvez simplement toucher $ @ _ heure < / code> et ensuite faire date -r $ @ _ time +% s pour le récupérer.



1
votes

Si vous essayez d'obtenir des informations de synchronisation pour les étapes de votre construction, une meilleure solution consiste à utiliser une marque plus intelligente. Electricmake à partir du cloud électrique peut générer une version xml-balad-up du journal de construction , appelé un fichier annotation , qui inclut les données de synchronisation exactes pour chaque commande invoquée par la construction, ainsi qu'une charge de banque d'autres informations telles que les lignes de commande exactes utilisées (même si vous avez utilisé le @ préfixe) et les variables d'environnement utilisés par chaque commande.

Vous pouvez l'essayer gratuitement avec Sparkbuild , une version gratuite de Electricmake.


1 commentaires

Merci mais que je veux faire, c'est une partie d'une application et que les informations de synchronisation doivent être affichées sur chaque exécution. Nos clients veulent aussi voir cette information.



0
votes

Vous pouvez utiliser le temps:

all:
    @@time( \
        rsync -az ${src1} ${dest1} \
        && rsync -az ${src2} ${dest2} \
        ## etc.
    )


0 commentaires