p
u
b
l
i
c
i
t
é
publicité
  1. #1
    Nouveau Membre du Club
    Inscrit en
    octobre 2009
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : octobre 2009
    Messages : 87
    Points : 31
    Points
    31

    Par défaut Shell double redirection

    Bonjour,

    j'aimerai redirigeai les erreurs de mes commandes dans un shell.

    Exemple qui marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    if mysql -pMotDePasse Base --exec="select nom from utilisateur;" 2>/tmp/error.txt; then
            echo ok
    else
            echo ko
            cat  /tmp/error.txt
    fi
     
    if mysql -pMotDePasse Base --exec="select nom2 from utilisateur;" 2>/tmp/error.txt; then
            echo ok
    else
            echo ko
            cat  /tmp/error.txt
    fi
    Résultat :
    +--------------+
    | nom |
    +--------------+
    | USER1 |
    | USER2 |
    +--------------+
    ok
    ko
    ERROR 1054 (42S22) at line 1: Unknown column 'nom2' in 'field list'

    Mais pour cet exemple ça ne marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if mysql -pdamien ged < /t/tutu 2>/tmp/error.txt; then
            echo ok
    else
            echo ko
            cat  /tmp/error.txt
    fi
    Résultat :
    ./testScript.sh: line 92: /t/tutu: Aucun fichier ou dossier de ce type
    ko
    ERROR 1054 (42S22) at line 1: Unknown column 'nom2' in 'field list'

    L'erreur est directement écrite dans la console et pas redirigé vers mon fichier d'erreur. Du coup c'est l'erreur précédente qui est affichée.

    Je pense que le problème vient du fait que j'insère des données avec '<' dans la bdd et qu'ensuite je veux rediriger une erreur potentielle dans mon fichier texte avec '>' sur une même ligne.

    Savez vous comment contourner ce soucis ?

    Par avance merci,

    Damien.

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 515
    Points : 2 486
    Points
    2 486

    Par défaut

    Citation Envoyé par Sango64 Voir le message
    Je pense que le problème vient du fait que j'insère des données avec '<' dans la bdd et qu'ensuite je veux rediriger une erreur potentielle dans mon fichier texte avec '>' sur une même ligne.
    Non, l'erreur vient du fait que le fichier /t/tutu n'existe pas. Le message d'erreur que tu vois ("... Aucun fichier ou dossier de ce type") est affiché par le shell, pas par la commande mysql, et la redirection "2>/tmp/error.txt" n'a donc aucun effet.

    Par contre comme tu peux le constater, l'erreur "ERROR 1054 ...", qui est générée par la commande mysql, est bien redirigée dans /tmp/error.txt.

  3. #3
    Nouveau Membre du Club
    Inscrit en
    octobre 2009
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : octobre 2009
    Messages : 87
    Points : 31
    Points
    31

    Par défaut

    Merci pour cette réponse matafan.

    Saurais tu comment rediriger cette information vers mon fichier txt ?

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 515
    Points : 2 486
    Points
    2 486

    Par défaut

    Tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if { mysql -pdamien ged < /t/tutu; } 2>/tmp/error.txt; then
            echo ok
    else
            echo ko
            cat  /tmp/error.txt
    fi
    Une autre solution serait de rediriger carrément la sortie d'erreur de ton shell vers /tmp/error.txt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    exec 2>/tmp/error.txt
     
    if mysql -pdamien ged < /t/tutu; then
            echo ok
    else
            echo ko
            cat  /tmp/error.txt
    fi
    Un point sans rapport avec ta questions : il est extrêmement dangereux d'aller écrire dans un fichier de /tmp sans prendre de grandes précautions. Imagine qu'un utilisateur non privilégié créé un lien symbolique /tmp/error.txt vers un fichier sur lequel il na pas les droits d'écritures, mais sur lequel la personne qui lance ton script a les droits d'écriture. A l'exécution du script, le fichier cible sera écrasé.

  5. #5
    Nouveau Membre du Club
    Inscrit en
    octobre 2009
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : octobre 2009
    Messages : 87
    Points : 31
    Points
    31

    Par défaut

    Bonjour matafan,

    Merci beaucoup pour ces bons conseils et désolé de te répondre que maintenant, ça fonctionne très bien.
    Je ne connaissais pas la syntaxe avec les '{' '}'.

    Mon script sera exécuté une fois lors de l'installation d'une machine, il sera par la suite supprimé (avec le fichier d'erreur) de cette machine et donc non réutilisable.
    Mais je prends en compte ta remarque pour les autres scripts que je pourrai faire

    Au plaisir.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 09/02/2015, 20h52
  2. Double redirection (tordu)
    Par pimpmyride dans le forum Apache
    Réponses: 4
    Dernier message: 21/11/2012, 10h44
  3. [ shell UNIX ] redirection d'un resultat de tar
    Par donfab dans le forum Linux
    Réponses: 2
    Dernier message: 15/12/2007, 21h47
  4. [shell script] redirections multiples (mal gerées)
    Par frp31 dans le forum Administration système
    Réponses: 10
    Dernier message: 11/09/2007, 14h59
  5. [VB.NET]Double redirection.
    Par CammCamm dans le forum ASP.NET
    Réponses: 9
    Dernier message: 24/11/2003, 15h11

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