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

Linux Discussion :

[BASH] Empecher l'affichage d'erreur d'une commande


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 74
    Par défaut [BASH] Empecher l'affichage d'erreur d'une commande
    Bonjour,

    Je sais que l'intitulé est un peu obscur, mais voici l'explication:

    Je cherche à convertir un .doc en .pdf et ensuite générer une image à partir de la première page de ce pdf.

    Pour cette dernière étape j'utilise le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    until  $(convert $OUTPUT"[0]" $REP$FNAME".jpg") || [[ $CONVERT_COUNT -ge $CONVERSION_MAX_EXEC_TIME ]]
    J'ai besoin de ce bout de code car je ne sais pas combien de temps met l'imprimante virtuelle pour convertir le .doc, et si je lance le "convert" trop tôt, il ne peut effectuer la conversion car il ne trouve pas de EOF.

    Cette commande marche, le seul détail est qu'elle m'affiche un message d'erreur à chaque essai.
    J'ai bien essayé d'entourer la commande de '[' ou '[[' (oui, je ne suis pas un expert bash, donc j'y vais à tâtons) mais dans ce cas, la commande ne marche plus.

    Je suis donc preneur de bons conseils sur le développement de script bash.

    Merci d'avance

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Mister_Kp Voir le message
    Je suis donc preneur de bons conseils sur le développement de script bash.
    salut

    Toute tâche de travail Unix possède 2 périphériques d'affichage
    - le périphérique n° 1 qui sert à afficher les messages "normaux"
    - le périphérique n° 2 qui sert à afficher les messages d'erreur

    Par défaut ces 2 périphériques vont sur l'écran. Mais il est possible de rediriger l'un ou l'autre ou les deux vers autre chose (un fichier de log, un autre écran, ou la poubelle des périphériques "/dev/null")

    Donc te suffit de faire suivre ta commande par "2>/dev/null"

    A noter: cette technologie ne doit pas être utilisée pour masquer une erreur de programmation car même si le message n'arrive pas sur l'écran, l'erreur reste. Elle ne doit être employée que pour masquer l'affichage d'une erreur que tu maitrises...

    Un exemple d'utilisation: vérifier qu'un fichier existe: faire un "ls" dessus et masquer l'erreur renvoyée par ls quand le fichier n'existe pas...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 74
    Par défaut
    Merci beaucoup,

    J'avais en effet déjà entendu parlé de cette histoire de périphérique mais du coup, c'est beaucoup plus clair.

    Citation Envoyé par Sve@r Voir le message
    A noter: cette technologie ne doit pas être utilisée pour masquer une erreur de programmation car même si le message n'arrive pas sur l'écran, l'erreur reste. Elle ne doit être employée que pour masquer l'affichage d'une erreur que tu maitrises...
    Oui je suis bien conscient de ça, mais dans mon cas, je maitrise effectivement l'erreur (du moins je crois).

    Bon j'ai encore une erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Error: /stackunderflow in --run--: Aucun fichier ou dossier de ce type
    qui s'affiche, mais je pense que ça vient de la configuration du fichier de sortie.

    [Edit] Ah ben non en fait, je pense que ça vient de la syntaxe de ma commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    until  $(convert $OUTPUT"[0]" $REP$FNAME".jpg" 2>/dev/null) || [[ $CONVERT_COUNT -ge $CONVERSION_MAX_EXEC_TIME ]]
    Du coup, le script remplace le tout et me sort cette erreur.
    Si je met le tout entre '[', je n'ai plus cette erreur mais une autre:
    Du coup je bloque un peu [/Edit]

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 74
    Par défaut
    Bon ben j'ai trouvé du coup; il fallait mettre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    until  $(convert $OUTPUT"[0]" $REP$FNAME".jpg" > /dev/null 2>&1) || [[ $CONVERT_COUNT -ge $CONVERSION_MAX_EXEC_TIME ]]

    Merci encore

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    pas besoin de substitution de commande ( $(cmd) ), par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    until ls "n'existe pas" 2>/dev/null || [ ${nb:-0} -eq 3 ]; do echo $((nb++)); sleep 1; done
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

Discussions similaires

  1. Activer l'affichage des erreurs pour une IP donnée
    Par guidav dans le forum Langage
    Réponses: 4
    Dernier message: 19/05/2008, 10h43
  2. erreur d'une commande RMAN
    Par fouad77fr dans le forum Recovery Manager
    Réponses: 3
    Dernier message: 15/05/2008, 09h02
  3. Intercepter les erreurs d'une commande ?
    Par Olivier Regnier dans le forum Linux
    Réponses: 2
    Dernier message: 01/12/2006, 12h28
  4. Gestion des erreurs sur une commande multiple
    Par domiq44 dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 05/10/2006, 15h03
  5. Rediriger les erreurs d'une commande
    Par GLDavid dans le forum Langage
    Réponses: 9
    Dernier message: 10/11/2005, 21h03

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