Forum Programmation.shell script bash

Posté par  .
Étiquettes : aucune
0
4
juin
2005
Bonsoir,

Je n'arrive pas à faire fonctionner un fichier bash "test.sh"
#!/bin/bash
echo abc

La console ne reconnais pas '#!/bin/bash'
Mais quand j'execute directement à la console :
/bin/bash test.sh
le fichier s'exécute sans problème ('abc' s'affiche)

Quelqu'un connaît-il la raison de ce comportement.

merci

Phildes
  • # Est-ce un fake?

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

    Bonsoir,

    le '#!/bin/bash' est là pour dire que ce script est à exécuter par bash (tu as aussi des 'scripts' perl, python, php, ou tu peux préférer sh, tcsh, zsh, etc.).

    Ainsi, quand tu te donnes les droits d'exécution sur ce fichier, tu n'as qu'à taper "./test.sh", sans avoir à spécifier l'interpréteur.

    '#!/bin/bash' n'est pas une commande du shell:
    -Le # est là pour dire que, dans le fichier, ceci est un commentaire (# est utilisé pour introduire un commentaire dans pas mal de languages: bash/sh/..., gnuplot, php,... mais ce n'est pas universel: LaTeX utilise %, C le couple /* */, d'autres le !).
    -Le ! indique à ton shell que ce qui suit désigne l'interpréteur.

    Ceci est ton premier message sur le forum, j'essaye donc d'être indulgent, mais la prochaine fois, cherche un peu avant (c'est beaucoup plus court que de poster un message). Si tu cherches 'bash #!/bin/bash' dans Google, la deuxième entrée t'en apprend beaucoup plus que ce que je viens d'écrire.

    Voilivoilou
    • [^] # Re: Est-ce un fake? : non pas forcément ...

      Posté par  . Évalué à 2.

      En fait j'ai déjà rencontré ce problème il y a quelques temps ...

      J'avais un fichier shell du même genre, disons hello.sh

      > #!/bin/sh
      > echo "hello world"

      si je faisais

      > ./hello.sh

      J'obtenais

      > No such file or directory

      et si je faisais

      > bash ./hello.sh

      ça marchait. La raison ? Par une diablerie inexplicable, le fichier était au format DOS. Regarde dans la barre en bas de Vim si tu n'as pas marqué [dos] dans la barre en bas.





      • [^] # Re: Est-ce un fake? : non pas forcément ...

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

        rendre executable ?
        chmod +x bash.sh
        • [^] # Re: Est-ce un fake? : non pas forcément ...

          Posté par  . Évalué à 2.

          Merci de vos réponses.

          Désolé Khapin, ce n'est pas un fake, mais ma question n'était pas claire, je pense.
          Je vais essayer de l'être.

          ------------------
          Prérecquis :
          ------------------
          Je connaissais le rôle de la 1ère ligne et des ses différents signes, j'avais fait des recherches sur Google ;-)

          ------------------
          Question :
          ------------------
          Pourquoi ça ne fonctionne pas ?

          ------------------
          Description du problème :
          ------------------
          A - préparation du fichier script.
          1 - Fichier texte " test.sh" de 2 lignes, décrit ci-dessous :
          #!/bin/bash
          echo abc

          2 - Valider la propriété/permission/executable (j'ai aussi essayé "chmod" comme me l'a conseillé Sylvain)

          3 - Ajouter le chemin du fichier dans la variable PATH

          B - Execution du script.
          1 - Dans la console, j'écris : test.sh
          Réponse : bad interpreter:Nosuch file or directory.

          ------------------
          C - test1 :
          1 - dans la console j'écris : /bin/bash test.sh : ca fonctionne.
          >>' /bin/bash/' est donc bien présent et accessible.

          D - test2 :
          1 - je supprime la 1ère ligne du fichier, il ne reste que la commande "echo abc",
          2 - dans la console j'écris : test.sh : ca fonctionne,
          >> Ici, le script fonctionne sans avoir indiqué d'interpréteur.
          ------------------

          Merci de votre aide

          Phildes
          • [^] # Re: Est-ce un fake? : non pas forcément ...

            Posté par  . Évalué à 1.

            Et bien j'avais exactement le même comportement avec mon fichier au format DOS. Ce sera la même chose si tu as des caractères non imprimable après le #!/bin/bash

            Tape

            > xxd ./test.sh

            ce qui nous donnera le dump en hexa du fichier et envoie le résultat ...
            (installe xxd au besoin, ça vient avec vim, je crois ...)

            A+
            • [^] # Re: Est-ce un fake? : non pas forcément ...

              Posté par  . Évalué à 2.

              Oui, oui, c'est exactement le problème.
              En fait il 'agissait bien de fichiers DOS comme tu me l'as dit dans ton 1er post.

              Merci beaucoup de ton aide.

              Phildes
              • [^] # Re: Est-ce un fake? : non pas forcément ...

                Posté par  . Évalué à 1.

                "doublehp" m'a demandé de poster son message car il ne peut le faire lui-même :
                ----------début de message-----------
                tu sent le CRLF toi ...
                essaye avec vim pui joe
                je suis sur qu un des deux montrera des ^M indicant la presence de 0x06 : les carrieg return si cheres a DOS ...
                une fois ceux ci otes, ca marchera beaucoup mieux :)

                AMHA
                ---------fin de message----------

                C'était effectivement le problème comme dit plus haut ;-)

                Phildes
    • [^] # Ceci est un fake ;-)

      Posté par  . Évalué à 2.

      > Ceci est ton premier message

      Effectivement, merci pour ce charmant acceuil ;-)

      > J'essaye donc d'être indulgent

      Je n'ose imaginer quand vous ne l'êtes pas.
      Grand Dieu ! Tout ceci à l'air très très sérieux !

      > Si tu cherches "bash #!/bin/bash" dans Google,
      > la deuxième entrée t'en appends baucoup plus...

      Certainement, malheureusement elle est en allemand :-D

      ----------------------------------------

      Désolé pour ce courrier [HS], Mais quand j'ai vu que la seconde entrée Google, conseillée par le très scrupuleux M khapin, était en allemand, j'ai pas résisté Hihi, Je suis resté très gamin.

      ----------------------------------------

      Et encore un grand merci à ceux qui m'ont aidés en français.

      Phildes
      • [^] # Re: Ceci est un fake ;-)

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

        Désolé pour la réponse, mais ta question n'était pas très claire ("La console ne reconnais pas '#!/bin/bash'").
        Si tu jettes un oeil aux question des forums, tu verras qu'il y a pas mal de 'primo-questionnants" qui posent des questions ici avant de réflechir ou de chercher. Je reconnais que ce n'est pas ton cas, mais ce n'est pas facile de deviner. La prochaine fois, pose ta question plus clairement dès le début, ou ne t'étonne pas qu'on la comprenne mal.

        Pour ce qui est de google, chez moi il est en Français...
        • [^] # Re: Ceci est un fake ;-)

          Posté par  . Évalué à 1.

          C'est très sympa de prendre mon post de la sorte. Pour moi on était à 1 partout. C'était OK.

          > mais ta question n'était pas très claire
          Effectivement, c'est pourquoi je ne suis pas venu chez toi avec un bazooka pour fair exploser ta baignoire ;-)
          Je suis en faute aussi.

          > Pour ce qui est de google, chez moi il est en Français
          Diantre !

          Et puis, en ces moments difficiles (cf brevet logiciel), je préfère cette relation cordiale entre les intervenants du libre. On a assez à faire avec les "hostiles" de Bruxelles..

          Très cordialement.

          Phildes

Suivre le flux des commentaires

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