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 :

Définir un file descriptor


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Par défaut Définir un file descriptor
    Bonjour,

    Est-il possible de définir un nouveau file descriptor dans un script bash ?

    Je voudrais rajouter dans nos scripts des messages de debogage. Ce s messages seraient affichés sur la sortie console en temps normale.

    J'aimerais que le descripteur 3 permette de rediriger ce flux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    # monScript.sh 3> /tmp/debug.txt
    Est-ce possible ?


    Merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    bonjour,

    no problemo :
    Code test.sh : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #!/bin/bash
     
    echo "foo bar baz" 1>&3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ./test.sh 3>test.log
    cat test.log
    foo bar baz
    ...
    ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre Expert
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Par défaut
    Merci,

    Celà fonctionne bien si on redirige la sortie 3 dans un fichier. On crée donc le file descriptor.

    Cependant, si je ne fait aucune redirection, j'ai l'erreur suivant :


    bash-3.00$ ./publication.sh.inc 3>/dev/null
    bash-3.00$ ./publication.sh.inc
    ./framework.sh.inc: line 66: 3: Bad file descriptor
    Voici la fonction tel qu'elle existe dans le script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function debug()
    {
            [ ${DEBUG} -eq ${TRUE} ] && echo "DEBUG : $1" 1>&3 
    }

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    pourquoi ne pas rediriger directement dans un fichier ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function debug() {
            [ "$Debug" = TRUE ] && echo "DEBUG : $1" >> ${0}.log 
    }
    Debug=TRUE
     
    debug "le script fonctionne, ou pas :)"
     
    Debug=""
     
    debug "ça n'apparaîtra pas dans le log"
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre Expert
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Par défaut
    Car j'aurais bien voulu avoir le même mécanisme que pour la sortie d'erreur. Celle-ci s'affiche par défaut dans la sortie standard, mais on peut filtrer en redirigeant le flux 2 (2>...).

    En redirigeant dans un fichier, il faut regarder dans le script pour savoir ou se trouve le log.

  6. #6
    Membre Expert
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Par défaut
    Après avoir lu la doc suivante :
    http://abs.traduc.org/abs-fr/ch19.html

    J'ai tester ce script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    exec 3>/tmp/tst
    echo "ok" >&3
    qui fonctionne bien.
    bash-3.00$ ./descripteur.sh
    bash-3.00$ cat /tmp/tst
    ok
    Pourquoi la redirection du fd 3 ne fonctionne pas ?

    bash-3.00$ rm /tmp/tst
    bash-3.00$ ./descripteur.sh 3>/tmp/redirect.txt
    bash-3.00$ cat /tmp/redirect.txt
    bash-3.00$ cat /tmp/tst
    ok
    J'aurais pensé (et voulu) que "ok" soit écrit dans /tmp/redirect.txt.

Discussions similaires

  1. lire une ligne d'un file descriptor
    Par Pitou5464 dans le forum Réseau
    Réponses: 4
    Dernier message: 30/10/2006, 16h13
  2. pb file descriptor
    Par aimad41 dans le forum C
    Réponses: 2
    Dernier message: 23/10/2006, 18h16
  3. Coment obtenir le nombre total de file descriptor ouvert?
    Par homeostasie dans le forum Réseau
    Réponses: 7
    Dernier message: 21/06/2006, 11h55
  4. Bad file descriptor avec un read()
    Par je®ome dans le forum C
    Réponses: 2
    Dernier message: 04/04/2006, 19h30
  5. Etrange "Bad file descriptor"
    Par amauryxiv dans le forum Langage
    Réponses: 23
    Dernier message: 01/02/2006, 03h20

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