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

Shell et commandes GNU Discussion :

Infos, erreurs, et redirection de sortie


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 258
    Par défaut Infos, erreurs, et redirection de sortie
    Bonjour à tous,

    J'ai récemment mis en place en BDD, une colonne pour chaque script, qui s'appelle log.
    Si la valeur est 1, je veux que toute la sortie debug (set -x) soit redirigée dans un fichier de log (jusque la pas de soucis).

    Mais quelque soit cette valeure (1 ou 0) j'aimerai rediriger les erreurs uniquement dans un fichier error.log.
    Pour être plus précis, voici la situation.

    Lancement du batch : test.sh
    Cas 1 : log à 0.
    Redirection des erreurs uniquement (du style no such file or directory) dans le fichier error_test.log

    Cas 2 : log à 1.
    Redirection de la sortie debbug set -x dans le fichier test.log ET redirection des erreurs dans error_test.log.

    Comment faire ?
    Merci

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 103
    Par défaut
    Citation Envoyé par lokomass Voir le message
    Comment faire ?
    Pourrais-tu nous montrer l'ébauche de ton script (même si rien ne marche)?

  3. #3
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 258
    Par défaut
    OK, mettons un exemple, ce script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    bash-3.2$ cat t.sh
    #!/bin/bash
     
    t=9
    ls sdfsdf
    Si je le lance, voilà le résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    bash-3.2$ ./t.sh
    ls: sdfsdf: No such file or directory
    Si le log est à 1, j'aimerai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    bash-3.2$ ./t.sh
    bash-3.2$
    bash-3.2$ cat t.log
    + t=9
    + ls sdfsdf
    bash-3.2$ cat t_error.log
    ls: sdfsdf: No such file or directory
    Si le log est à 0, j'aimerai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    bash-3.2$ ./t.sh
    bash-3.2$ cat t_error.log
    ls: sdfsdf: No such file or directory

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 103
    Par défaut
    Si tu veux activer le mode trace en fonction du contenu d'une variable, tu peux ajouter ceci au début de ton script:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    function MY_DEBUG { [ "${LOG-}" = "1" ] && $@ ; }
    MY_DEBUG set -x # start trace mode
    ou bien juste ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [ "${LOG-}" = "1" ] && set -x # start trace mode

  5. #5
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 400
    Par défaut
    Bonjour,

    Les messages debug du shell ne sortent-ils pas sur STDERR ?

  6. #6
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 258
    Par défaut
    Ok pour la redirection merci, mais si je ne veux rediriger que les erreurs, et uniquement créer le fichier fic, si il y a des erreurs, parce que sans erreur, un fichier est créer à tous les coups...


  7. #7
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Voici une façon de dissocier la sortie d'erreur et la sortie de log, qui par défaut sont les mêmes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/bin/bash
     
    rm -f t.log t_error.log
    exec 2>t_error.log
    [ "$log" = 1 ] && trap 'printf "+ %s\n" "$BASH_COMMAND" >> t.log' DEBUG
    t=9
    ls sdfsdf
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $ export log=1
    $ ./t.bash       
    $ cat t_error.log
    ls: cannot access sdfsdf: No such file or directory
    $ cat t.log      
    + t=9
    + ls sdfsdf
    $ log=0
    $ ./t.bash
    $ cat t_error.log
    ls: cannot access sdfsdf: No such file or directory
    $ cat t.log
    cat: t.log: No such file or directory

  8. #8
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 103
    Par défaut
    Je ne sais pas si on peut séparer la sortie d'erreurs des commandes et la sortie de debug.

    Sinon on contournement possible consiste à tout envoyer dans "tmp.log" puis séparer à la main:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    exec 2> tmp.log
    # puis, une fois fini:
    egrep '^[+]' tmp.log > debug.log
    egrep -v '^[+]' tmp.log > error.log
    [ ! -s error.log ] && /bin/rm -f error.log
    /bin/rm tmp.log

Discussions similaires

  1. Erreur de redirection
    Par adlich dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 27/04/2006, 14h44
  2. [Authentification Realm] Infos utilisateur et redirection
    Par mamiberkof dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 22/04/2006, 23h16
  3. [Info] Erreur au startup
    Par etranger dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 18/02/2006, 16h21
  4. Redirection de sortie
    Par Danae dans le forum Linux
    Réponses: 22
    Dernier message: 11/12/2005, 23h32
  5. [ Struts ] erreur de redirection
    Par CapToMatteo dans le forum Struts 1
    Réponses: 4
    Dernier message: 30/04/2004, 18h22

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