Tester valeur de retoru - Shell/Batch - Programmation
Marsh Posté le 05-01-2006 à 13:31:52
Ben je dirais que c'est la commande sqlplus qui est mal ecrite ou bien pas ecrite comme tu le voudrai, et donc qu'elle indique qu'elle c'est tj bien terminer.
Essayer ca deja pour savoir où est envoyé le message d'erreur (sortie standard ou erreur)
sqlplus [mes_arguments] > log.log 2> err.log
Marsh Posté le 05-01-2006 à 13:42:11
PierreC a écrit : Ben je dirais que c'est la commande sqlplus qui est mal ecrite ou bien pas ecrite comme tu le voudrai, et donc qu'elle indique qu'elle c'est tj bien terminer. |
Pas forcément.
J'ai le même comportement avec isql, et je le conçois de la manière suivante : ce n'est pas mon interpréteur sql qui plante, il a bien envoyé sa requête, a bien reçu une réponse du serveur de base de données, a pu la traiter correctement et terminer son boulot.
Donc même si le serveur retourne une erreur (c'est-à-dire une interprétation de ta requête), ton interpréteur sql retourne 0, ce qui est logique puisqu'il a pu mener sa tâche à bien.
Marsh Posté le 05-01-2006 à 14:06:36
Citation : ton interpréteur sql retourne 0, ce qui est logique puisqu'il a pu mener sa tâche à bien. |
Ok car en fait j'avais essayer avec le code suivant :
Code :
|
Ou fic est un fichier qui n'existe pas, et mon echo $? retournait 0 donc si on suit le même raisonnement, le more retour un message d'erreur mais retourne qd même 0 puisqu'il a pu mener sa tâche à bien?
Ou alors $? ne prend pas la valeur de résultat?
Marsh Posté le 05-01-2006 à 14:09:43
Non, tu n'as pas suivi mon raisonnement.
Dans le cas du more, il n'a pas pu exécuter ce qu'on lui demandait de faire : le fichier n'existe pas.
Dans le cas de l'interpréteur sql, il a pu donner sa requête au serveur et recevoir une réponse. Donc il retourne 0.
En revanche, si tu lui donnes de mauvaises informations de connexion, il ne peut terminer son travail et ne retournera pas 0.
$ isql -S machin |
Bref, l'erreur que tu reçois est une erreur SQL provenant du serveur. Ce n'est pas une erreur de sqlplus.
Donc le code retour n'a aucune raison d'être différent de 0.
Marsh Posté le 05-01-2006 à 14:28:33
Oki merci beaucoup, je vais essayer de trouver une solution aux problèmes
Marsh Posté le 05-01-2006 à 14:36:00
La meilleure solution c'est, comme le propose pierreC, de rediriger le flux d'erreur vers un fichier.
Lis son post pour voir comment faire.
Après il te suffit de tester le fichier d'erreur. Par exemple s'il a une taille non nulle, tu sais que quelque chose à couillé.
Marsh Posté le 10-01-2006 à 05:43:38
Si tu choisis de capturer stderr dans un fichier comme proposé, n'oublie pas de lancer la command avec LANG=C. Sinon la sortie varie en fonction de la locale utilisée au moment de l'appel, et il est impossible de faire un test qui marche dans tous les cas.
Marsh Posté le 05-01-2006 à 11:46:09
Bonjour à tous,
Voici mon script shell
Mon problème est le suivant :
Que ma commande sqlplus se plante ou non mon echo $? retourne toujours 0 ...
Aparament la variable $? ne récupère pas la valeur de retour de sqlplus, comment puis-je faire pour récupérer la valeur de retour de l'exécution de ma commande sqlplus?
Merci d'avance