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 :

Intercepter les exceptions avec le message d'erreur en bash


Sujet :

Shell et commandes GNU

  1. #1
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Août 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Août 2019
    Messages : 3
    Par défaut Intercepter les exceptions avec le message d'erreur en bash
    Bonjour a tous,

    je me demandais si en bash (version 3.2.57) il était possible de capter une exception avec son message, ou au moins différencier deux exceptions renvoyant le même code d'erreur.
    Par exemple, aura 1 pour code d'erreur mais Permission Denied comme message d'erreur, mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    touch /dossierInexistant/fichier
    renvoie aussi 1, mais avec le message no such file or directory. J'envoie le code qui va avec :
    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
    #!/bin/bash
    while [ 1 ]; do
    	echo entrez le chemin du fichier a creer \(ainsi que le nom du fichier et son extension\) ou tapez quit pour quitter :
    	echo repertoire courant : `pwd`
    	read file
    	if [ $file = "quit" ]; then
    		exit 0
    	fi
    	touch $file
    	if [ $? -eq 0 ]
    	then
    		echo Fichier cree avec succes !
    		read
    		exit 0
    	else
                    #code permettant de savoir si l'erreur vient d'une erreur de chemin ou d'un acces refuse
    		echo Echec de la creation du fichier
    	fi
    done
    Ce code demande à l'utilisateur un chemin pour créer un fichier, il s'arrête en cas de réussite, et en cas d'échec doit avertir l'utilisateur de la cause de l'erreur (ce qui actuellement me pose problème...).
    $? renvoie 1 dans les deux cas d'erreur que j'ai pu voir (erreur de chemin et permission refusée).

    Dans tout les cas je vous remercie de votre aide et de votre attention

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    Bonjour,

    mais, quand le script exécute le touch, le message d'erreur est affiché (en cas d'erreur).
    l'intérêt d'une telle manipulation n'est pas évidente.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    Par défaut
    Bonjour

    Reprécisons. Il y a 2 choses à connaître.
    • Les canaux de communications
    • La valeur de retour


    1) Les canaux de communications :
    • 0 : entrée standard
    • 1 : sortie standard
    • 2 : sortie d'erreur
    • 3 et + : canal utilisable par l'utilisateur.


    2) La valeur de retour :
    Sous linux, c'est
    • 0 si tout c'est bien passé.
    • Une valeur différente de 0 en cas d'erreur. Cette dernière valeur indique la nature de l'erreur.


    Par suite, 3 cas possibles:
    Message sur 1 + retour 0 -> sortie / output
    Message sur 2 + retour 0 -> avertissement / warning ("exception" dont tu parles)
    Message sur 2 + retour 1 -> erreur / error

    Ton "exception" est localement forcément une erreur. La question qui se pose à toi est "comment la traites-tu ?"
    Pour retraiter la valeur de retour, aller lire "les conditions en bash : if" (dans le man bash par exemple)
    Pour retraiter les messages d'erreur, aller lire "les redirections en bash"

  4. #4
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Août 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Août 2019
    Messages : 3
    Par défaut
    Re-bonjour à tous,

    Merci beaucoup de votre aide, j'ai finalement trouvé une solution, avec les redirections ainsi que grep :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    #!/bin/bash
     
    while [ 1 ]; do
     
    	echo entrez le chemin du fichier a creer \(ainsi que le nom du fichier et son extension\) ou tapez quit pour quitter :
     
    	echo \(repertoire courant : `pwd`\)
     
    	read file
     
    	if [ $file = "quit" ]; then
     
    		exit 0
     
    	fi
     
    	touch $file 2>errlog      #redirection de la sortie d'erreurs vers le fichier errlog
     
    	if [ $? -eq 0 ]; then
     
    		echo Fichier cree avec succes !
     
    		echo ">>Enter : OK<<"
     
    		read
     
    		exit 0
     
    	else	
     
    		echo Echec de la creation du fichier:
     
    		grep "Permission denied" errlog >/dev/null     #redirection de la sortie standard vers /dev/null
     
    		if [ $? -eq 0 ]; then                       
     
    			echo Permission d\'acces au repertoire refusee, verifier que vous avez les autorisations necessaires
     
    		else
     
    			echo Le repertoire specifie est introuvable, verifier que le repertoire specifie existe dans ce repertoire courant
     
    		fi
     
    	fi
     
    done

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 651
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 651
    Par défaut
    beurk.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    export LC_ALL=C
    motif='permission denied'
    msg=$(touch "$file" 2>&1) || if [[ $msg =~ $motif ]]
    then
       echo "permission non accordée" >&2      # les erreurs doivent être affichées sur la sortie d'erreur standard
    else
       echo "autre erreur" >&2
    fi
    mais je ne vois toujours pas d'intérêt à la chose.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Août 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Août 2019
    Messages : 3
    Par défaut
    Cela peut servir par exemple a demander si l'utilisateur souhaite créer le fichier en tant qu'administrateur si la permission lui est refusée, ou tout simplement rendre le message d'erreur plus compréhensible. Dans tout les cas, je pense que ça pourra me re-servir plus tard.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/12/2016, 15h01
  2. Problème avec un message d'erreur
    Par L'Oracle dans le forum Access
    Réponses: 4
    Dernier message: 08/04/2006, 11h11
  3. C++, intercepter les sorties avec les raw sockets
    Par ThibG dans le forum Développement
    Réponses: 6
    Dernier message: 08/08/2005, 10h44
  4. [FireBird 1.5][Delphi4]Exception:Cacher le message d'erreur
    Par Jean73 dans le forum Bases de données
    Réponses: 2
    Dernier message: 17/08/2004, 13h58
  5. Intercepter les 'Exceptions'
    Par Teo dans le forum ASP
    Réponses: 3
    Dernier message: 05/01/2004, 19h55

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