IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Unix Discussion :

viabilité d'une fonction pour lancer une ligne de commande en gardant des traces


Sujet :

Unix

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur web java en alternance
    Inscrit en
    Janvier 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur web java en alternance
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2016
    Messages : 6
    Points : 9
    Points
    9
    Par défaut viabilité d'une fonction pour lancer une ligne de commande en gardant des traces
    Bonjour,

    Je commence à ma lancer un peu "sérieusement" dans les shell unix. Comprenez "au delà de juste lancer des commandes à l'arrache, j'essaie de de plus en plus d'architecturer mes scripts (fonction, gestion d'erreur, ...)"

    Par exemple, pour garder des traces horodatées des commandes que je lance, plutôt que d'écrire à chaque fois un "echo date +....", j'ai pensé faire une fonction qui lance à la fois la commande et écrit les traces en même temps.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    #-----------------------------------------
    # Fonction qui exécute une ligne de commande passée en paramètre, en écrivant une ligne de trace horodatée, avant et après le lancement
    # 
    # exemple : FN_EXECUTE_ET_TRACE_LIGHT "echo ${1}"
    #-----------------------------------------
    FN_EXECUTE_ET_TRACE_LIGHT () {
    		# on incrémente le niveau de trace pour que, si la commande exécutée utilise elle-même cette fonction, les lignes de commentaires soient indentées selon le niveau d'appel
    		let V_NIVEAU_TRACE=V_NIVEAU_TRACE+1; export V_NIVEAU_TRACE
    		local V_INDENTATION=`FN_REPETE "    " $(($V_NIVEAU_TRACE-1))` # défini en local à cause du problème de récursivité potentielle
                                                                                                                         # la fonction `FN_REPETE chaine n`, répète la chaine de caractère chaine n fois
     
    		V_LIGNE_COMMANDE=${1}
    		# exécution de la ligne de commande avec écriture des heures de début/fin sur la sortie standard
    		echo "${V_INDENTATION}** "`date "+%d/%m/%Y %H:%M:%S"`" - ligne de commande = ${V_LIGNE_COMMANDE}"
    				eval "${V_LIGNE_COMMANDE}"
    				V_CODE_RETOUR=$?
    		echo "${V_INDENTATION}** "`date "+%d/%m/%Y %H:%M:%S"`" - code retour = $V_CODE_RETOUR"
     
    		# on revient au niveau de trace "supérieur"
    		let V_NIVEAU_TRACE=V_NIVEAU_TRACE-1; export V_NIVEAU_TRACE
    		# sortie de la fonction en renvoyant le code retour du script exécuté
    		return $V_CODE_RETOUR
    }
    Bon alors, ça a l'air de fonctionner.
    Mais je me pose des questions un peu "conceptuelles" et de performances, genre :
    - Est-ce que finalement, je ne fais pas du zèle avec une fonction comme ça? (et que j'ai une vision trop "langage de programmation" qui ne colle pas forcément avec le contexte "shell unix")
    - Est-ce qu'il y a moyen de faire mieux (en termes d'optimisation, de lisibilité, ...)?
    - La fonction pouvant être utilisée pour lancé une commande qui lance un shell dans lequel on fait aussi appel à la fonction ... (d'où le coup de l'incrément du niveau de trace et de l'indentation), Est-ce que ça ne peut pas être couteux en ressource (j'ai lu que la récursivité n'était pas top dans les shell)?

    Si vous avez un avis ou une réponse sur ces questions, je serai ravi de vous lire.
    Merci par avance de me guider sur le chemin du code juste!

  2. #2
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    Citation Envoyé par jhila Voir le message
    Bonjour,

    Mais je me pose des questions un peu "conceptuelles" et de performances, genre :
    - Est-ce que finalement, je ne fais pas du zèle avec une fonction comme ça? (et que j'ai une vision trop "langage de programmation" qui ne colle pas forcément avec le contexte "shell unix")
    tout depand de l importance fonctionnelle du script
    du zele ... si c est pour apprendre...pour untruc importan....pour un truc complexe...pour de la prod.... parce que quelqu un d autre sera ammener a modifier le script dans un deux ou trois ans....alors non c est pas du zele....
    c est meme une bonne pratique....
    j ai recement change de boulot et je tombe sur des scripts propres et lisibles ça ma facilite considérablement la vie surtout avec mon role dans un environnement tres "critique"

    - Est-ce qu'il y a moyen de faire mieux (en termes d'optimisation, de lisibilité, ...)?
    - La fonction pouvant être utilisée pour lancé une commande qui lance un shell dans lequel on fait aussi appel à la fonction ... (d'où le coup de l'incrément du niveau de trace et de l'indentation), Est-ce que ça ne peut pas être couteux en ressource (j'ai lu que la récursivité n'était pas top dans les shell)?

    Si vous avez un avis ou une réponse sur ces questions, je serai ravi de vous lire.
    Merci par avance de me guider sur le chemin du code juste!
    vu les performances réelles par opposition aux perfs théoriques des machines qu on utilise... s inquiéter de ressources est de moins en moins crédible... et pour moi accepter ça m'a pris des années...



    si tu veux des exemples je vois des scripts tous les jours qui concurrencent sans problème des développeurs application d un point de vue qualitatif...avec des dizaines de fonction... du contrôle d erreur... des milliers de lignes de code dont 15 a 30% de commentaires

Discussions similaires

  1. Appeler une fonction pour lancer une alerte javascript
    Par beegees dans le forum Langage
    Réponses: 1
    Dernier message: 09/01/2009, 16h10
  2. [AJAX] [XAJAX] Lancer une fonction JS dans une fonction AJAX
    Par sixieme-sens dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 26/12/2008, 15h26
  3. Utiliser Createprocess pour lancer une fonction
    Par lolita4882 dans le forum C++
    Réponses: 3
    Dernier message: 14/03/2008, 12h01
  4. pb pour lancer une fonction relative à AD
    Par poussin_44 dans le forum VB.NET
    Réponses: 7
    Dernier message: 07/07/2007, 14h05
  5. [DOM] Onmouseover pour lancer une fonction avec arguments
    Par Trock dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 01/06/2007, 13h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo