Forum Programmation.shell Bad fd number

Posté par  .
Étiquettes : aucune
0
28
oct.
2005
Bonjour,

J'ai codé un script pour lancer automatique psybncau démarage de mon serveur mais il ne fonctionne pas
J'obtient l'érreur suivante : Syntax error ; bad fd number


#!/bin/sh


PATH=/usr/local/bin
NAME=PsyBNC

case $1 in
start)
echo -n "Starting $NAME"
psybnc /usr/local/etc/psybncd >& /dev/null
;;

stop)
echo -n "Stopping $NAME"
killall -9 psybnc >& /dev/null
;;

restart)
echo -n "Restarting $NAME"
killall -9 psybnc >& /dev/null
psybnc $CONF >& /dev/null
;;

*)
echo -n "Usage : /etc/rc.d/psybncd {START|STOP|RESTART}"
exit 1
;;
esac
exit 0


L'érreur serait située au à la ligne contenant "esac" ...

Merci
  • # psybnc /usr/local/etc/psybncd >& /dev/null

    Posté par  . Évalué à 5.

    Le & doit être suivi d'un numero. Pour rediriger vers un fichier, tu fais psybnc /usr/local/etc/psybncd > /dev/null
    • [^] # Re: psybnc /usr/local/etc/psybncd >& /dev/null

      Posté par  (site web personnel) . Évalué à 4.

      tout à fait !
      d'ailleurs tu pourrais :
      PATH="/usr/local/bin"
      NAME="PsyBNC"

      et
      echo -n "Usage : /etc/rc.d/psybncd {start|stop|restart}"

      Ca mange pas de pain et le code est bcp plus clair !
      • [^] # Re: psybnc /usr/local/etc/psybncd >& /dev/null

        Posté par  . Évalué à 2.

        Ok je test, je m'étais inspiré d'autre script ça doit venir de là. Mais sinon à quoi sert "&" ?

        Concernant la réponse de skeespin, je présume que le mot après "tu pourrais" est "supprimer" :), Pourquoi veux-tu que je supprime echo -n "Usage : /etc/rc.d/psybncd {start|stop|restart}" ?

        merci
        • [^] # Re: psybnc /usr/local/etc/psybncd >& /dev/null

          Posté par  (site web personnel) . Évalué à 3.

          Arf mais non !
          il vaut mieux d'experience utiliser les doubles cotes
          quand tu affectes des chaines de caracteres a des variables.
          Deplus dans ton aide les arguments passés au script sont en majuscules alors que dans ton "case" tu utilises des minuscules ("START" != "start")
        • [^] # Re: psybnc /usr/local/etc/psybncd >& /dev/null

          Posté par  . Évalué à 3.

          > nom_fichier permet la redirection de la sortie standard vers le fichier nom_fichier.

          > &n permet de rediriger la sortie standard vers le descripteur de fichier n (1 correspondant a la sortie standard, 2 a la sortie d'erreur).
      • [^] # Re: psybnc /usr/local/etc/psybncd >& /dev/null

        Posté par  . Évalué à 2.

        ben pas trop en fait, >& permet de diriger stdout et stderr sur le mm fichier (/dev/null),

        donc je dirais que son pb ne vient pas du script en lui mm (en remplacant psybnc par echo ca marche tres bien chez moi), mais de la variable $CONF qui n'est pas init... (d'ailleurs ca serait mieux de l'utiliser aussi dans le start, et pas seulement le restart)

        apres je ne sais pas comment fonctionne psybnc si on ne lui file pas d'argument... mais je dirais qu'il sort en erreur, et le shell le dit tout tranquillement...
        • [^] # Re: psybnc /usr/local/etc/psybncd >& /dev/null

          Posté par  . Évalué à 2.

          ben pas trop en fait, >& permet de diriger stdout et stderr sur le mm fichier (/dev/null),

          T'es sur que ca marche en sh ce truc, et que c'est pas du specific bash?

          essaye en sh (j'ai pas de bash pour tester ici). Mais sous ksh (AIX) :


          $ echo "coucou" >& /dev/null
          ksh: /dev/null: bad file unit number
          • [^] # Re: psybnc /usr/local/etc/psybncd >& /dev/null

            Posté par  . Évalué à 2.

            effectivement, avec le sh de base, il faut faire :

            $ echo "coucou" 2>&1 >/dev/null
            $

            • [^] # Re: psybnc /usr/local/etc/psybncd >& /dev/null

              Posté par  . Évalué à 1.

              decidement, je n'ai pas la main heureuse aujourd'hui :

              $ echo "coucou" >/dev/null 2>&1
              $

              dans le cas ou on utilise un programme qui emet sur stderr aussi :)

              dsl pour le bruit precedent...
          • [^] # Re: psybnc /usr/local/etc/psybncd >& /dev/null

            Posté par  . Évalué à 3.

            > ben pas trop en fait, >& permet de diriger stdout et stderr sur le mm fichier (/dev/null),
            >
            > T'es sur que ca marche en sh ce truc, et que c'est pas du specific bash?

            Il pense en fait à "&>" je pense. "cmd &>/dev/null", c'est un raccourcis pour "cmd >/dev/null 2>&1", enfin bref "&>" est une redirection des deux sorties à la fois.

            Ça existe au moins en Bash, mais je ne sais pas si c'est du pur Bourne shell ou pas.
        • [^] # Re: psybnc /usr/local/etc/psybncd >& /dev/null

          Posté par  . Évalué à 1.

          Oui j'avais créé une variable conf au début, mais je l'ai supprimée, mais j'ai déjà corrigé ce problème, mon script fonctionne désormais ! C'était bien & qui causait le problème !

          merci

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.