618 votes

Pourquoi avez-vous besoin de mettre #! / Bin / bash au début d'un fichier script?

J’ai fait des scripts Bash avant et ils ont tous couraient très bien sans cela au début. Quel est le point de mettre en ? Choses serait différents ?

Aussi, comment se prononce ? Je sais que se prononce comme « bang ».

Comment est `` prononcé ?

509voto

paulsm4 Points 39422

C'est une convention, afin de les *nix shell sait quel genre d'interprète à exécuter.

Par exemple, les anciennes saveurs de ATT, par défaut, "sh" (le Bourne shell), alors que dans les anciennes versions de BSD par défaut "csh" (le C shell).

Même aujourd'hui (où la plupart des systèmes exécuter "bash", le "Bourne Again Shell"), les scripts peuvent être en bash, python, perl, ruby, PHP, etc, etc. Par exemple, vous pouvez voir "!/bin/perl" ou "/bin/perl5".

PS: Le point d'exclamation ("!") est affectueusement appelé "bang". La coquille symbole de commentaire ("#") est parfois appelé le "hachage".

PPS: Rappelez - sous *nix, l'association d'un suffixe à un type de fichier est simplement une convention, pas une "règle". Un "exécutable" peut être un binaire programme, tout un de un million de types de scripts et d'autres choses aussi. D'où la nécessité d' "#!/bin/bash".

154voto

Basile Starynkevitch Points 67055

Pour être plus précis le shebang #!, quand c'est les deux premiers octets d'un fichier exécutable, est interprété par le execve(2) de l'appel système (qui exécutent des programmes). Mais spécification POSIX pour execve ne mentionnent pas le shebang.

Il doit être suivi par un chemin absolu d'un interprète exécutable.

Une belle astuce pour trouver un interprète (par exemple, python) dans de l'utilisateur $PATH est d'utiliser l' env programme (toujours à l' /usr/bin/env sur tous les Linux) comme par exemple

 #!/usr/bin/env python

Tout ELFE exécutable peut être un interprète. Vous pourriez même utiliser #!/bin/cat si vous le voulais!

53voto

austin1howard Points 1040

Il a appelé à un beau spectacle. En unix-parler, # est appelé sharp (comme en musique) ou de hachage (comme les hashtags sur twitter), et de ! est appelé bang. (Vous pouvez en fait la référence de votre précédente commande shell avec !!, appelé bang-bang). Donc, une fois mis ensemble, vous obtenez de hachage-BANG, ou shebang.

La partie après le #! raconte Unix quel programme utiliser pour l'exécuter. Si elle n'est pas spécifiée, il va essayer avec bash (ou sh, ou zsh, ou quel que soit votre $variable SHELL), mais si il y est, il va utiliser ce programme. De Plus, # est un commentaire dans la plupart des langues, de sorte que la ligne est ignorée dans l'exécution ultérieure.

20voto

Noufal Ibrahim Points 32200

L' arborescence est une directive à la chargeur pour utiliser le programme spécifié après l' #! comme l'interprète pour le fichier en question lorsque vous essayez de l'exécuter. Donc, si vous essayez d'exécuter un fichier appelé foo.sh qui a #!/bin/bash en haut, la commande qui s'exécute est - /bin/bash foo.sh. C'est un moyen souple d'utilisation des différents interprètes pour les différents programmes. C'est quelque chose de mis en œuvre au niveau du système et le niveau de l'utilisateur de l'API est le shebang convention.

Il est également important de savoir que le shebang est un nombre magique - un lisible par l'homme celui qui identifie le fichier comme un script pour l'interprète.

Votre remarque au sujet de "travailler" même sans le shebang est seulement parce que le programme en question est un shell script écrit pour la même coque que celui que vous utilisez. Par exemple, vous pouvez très bien écrire un fichier javascript et puis mettre un #! /usr/bin/js (ou quelque chose de similaire) pour avoir un javascript "script Shell".

11voto

Uday Sawant Points 2557

On l’appelle un tralala. Il se compose d’un signe dièse et un caractère de point d’exclamation (#!), suivi du chemin complet vers l’interpréteur comme/bin/bash. Tous les scripts sous UNIX et Linux exécutent à l’aide de l’interpréteur indiquée sur la première ligne.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X