Rechercher : dans
Par :

Récupérer erreurs sql dans un script shell

Dernière réponse le 7 sep 2008 à 02:52:27 notkinvi, le 5 sep 2008 à 23:39:14 
 Signaler ce message aux modérateurs

Bonjour,

Je viens solliciter votre aider pour finir mon programme shell.
Je réalise un programme shell sous Linux pour automatiser l'importation de données dans une base de données mysql.
Chaque fichier contient des milliers de lignes avec un nombre variable de champs.

Pour faire l'importation, je prépare dans mon shell un fichier contenant une chaine sql "insert into maTable(...) values (...);" que j'exécute comme ceci:

mysql --user=userName --password=userPassword -D maBaseDeDonnees < fichierSQL

En général cela fonctionne mais lorsqu'il se produit une erreur, il s'affiche sur le output standard.
Je souhaiterais plutôt rediriger les éventuelles erreurs dans un fichier afin de pouvoir les traiter ultérieurement.

J'ai essaye ceci sans succès:

mysql --user=userName --password=userPassword -D maBaseDeDonnees < fichierSQL > fichierOutput

Je vous serais vraiment reconnaissant si quelqu'un peut m'aider a trouver comment rediriger les erreurs mysql vers un fichier.

Merci par avance

notkinvi

Configuration: Windows XP
Firefox 3.0.1

Meilleures réponses pour « Récupérer erreurs sql dans un script shell » dans :
[IE] Erreur de script / Effectuer un débogage Voir De temps en temps, lorsque vous naviguez sur le Net et que vous chargez une page Web, un message d'erreur de script survient : Une erreur est survenue. Une erreur est survenue sur le script de cette page. Souhaitez-vous effectuer un débogage...
Exécuter un script shell VoirExécution d'un script Pour pouvoir exécuter un script ou un programme en ligne de commande il y a plusieurs possibilités : 1. Le chemin absolu 2. Le chemin relatif 3. Modifier la variable PATH Note: Le Sha...

1

mamiemando, le 6 sep 2008 à 01:19:19
  • +1

Pour rediriger la sortie d'erreur et la sortie standard il faut utiliser les opérateurs 1> et/ou 2>. Exemple avec un petit programme en C++ dont le code est :

#include <iostream>

int main(){
    std::cout << "J'écris sur la sortie standard" << std::endl;
    std::cerr << "J'écris sur la sortie d'erreur" << std::endl;
    return 0;
}

Quand je lance le programme j'écris dans la console aussi bien ce qui est écrit dans la sortie d'erreur et la sortie standard :
(mando@aldur) (~) $ g++ -W -Wall plop.cpp
(mando@aldur) (~) $ ./a.out
J'écris sur la sortie standard
J'écris sur la sortie d'erreur

À présent effectuons une redirection de la sortie standard dans plop.1 et de la sortie d'erreur dans plop.2 :
(mando@aldur) (~) $ ./a.out 1> plop.1 2>plop.2
(mando@aldur) (~) $ cat plop.1
J'écris sur la sortie standard
(mando@aldur) (~) $ cat plop.2
J'écris sur la sortie d'erreur
Par contre > ne redirige que la sortie standard :
(mando@aldur) (~) $ ./a.out > plop.3
J'écris sur la sortie d'erreur
(mando@aldur) (~) $ cat plop.3
J'écris sur la sortie standard

Tu peux aussi rediriger les deux flux vers un même fichier :
(mando@aldur) (~) $ rm plop.4
(mando@aldur) (~) $ ./a.out 1>>plop.4 2>>plop.4
(mando@aldur) (~) $ cat plop.4
J'écris sur la sortie standard
J'écris sur la sortie d'erreur

Normalement tu es sensé pourvoir écrire :
./a.out 2>&1 > plop.4

... mais pour une raison qui m'échappe il redirige mal le flux :s

Bonne chance

Répondre à mamiemando

2

 notkinvi, le 7 sep 2008 à 02:52:27

Bonjour mamiemando,

Ta réponse m'est fort utile.
Je pense déjà que cela va résoudre mon problème.
Je reviens juste après exécution
Merci infiniment

Répondre à notkinvi