Quelle est l'utilité/Signification de"#!/ bin/ sh " dans shell scripting?

qu'est-Ce que l'utilisation et la signification de "#!/bin/sh" dans les scripts shell? S'il vous plaît, faites-moi savoir s'il est considéré dans le script ou non comme il est commenté.

17
demandé sur the Tin Man 2012-01-08 15:41:32

5 réponses

Le sha-bang ( #!) [1] à la tête d'un script indique que ce fichier est un ensemble de commandes de la fed à l'interpréteur de commande indiqué. Le #! est en fait un nombre magique de deux octets [2], un marqueur spécial qui désigne un type de fichier, ou dans ce cas un script shell exécutable (type Man magic pour plus de détails sur ce sujet fascinant). Immédiatement après le sha-bang se trouve un nom de chemin. C'est le chemin vers le programme qui interprète les commandes dans le script, que ce soit une coquille, un langage de programmation, ou un utilitaire. Cet interpréteur de commandes exécute ensuite les commandes dans le script, en commençant par le haut (la ligne qui suit la ligne sha-bang), et en ignorant les commentaires. [3]

Source:http://tldp.org/LDP/abs/html/sha-bang.html#MAGNUMREF

22
répondu sisve 2012-01-08 11:44:19

un script peut spécifier #!/bin/bash sur la première ligne, ce qui signifie que le script doit toujours être exécuté avec bash, plutôt qu'un autre shell. /bin / sh est un exécutable représentant le shell du système. En fait, il est habituellement implémenté comme un lien symbolique pointant vers l'exécutable pour n'importe quel shell du système

2
répondu Raju Muke 2016-12-29 08:26:47

C'est le chemin où le shell exécutable se trouve.

1
répondu Smi 2012-01-08 11:44:17

il est utilisé par le système D'exploitation pour les fichiers réguliers dont le bit d'exécution est défini. Si le fichier n'est pas reconnu comme un format binaire "pur" (i.e., ELF, ou nain, ou autre), L'OS essaie et lit #!/path/to/interpreter -plus -options et transforme:

myscript myargument

en:

/path/to/interpreter -plus -options myscript myargument

il prend également des dispositions pour que argc et argv soient corrects (c'est-à-dire que argv[0] sera votre nom de script, et argv[1] sera l'option 1 etc).

cela fonctionne aussi pour les scripts perl, python et autres. En fait, quelle que soit la interprète de votre choix.

0
répondu fge 2012-01-08 11:46:31

cela signifie que votre script sera exécuté en mode compatibilité (POSIX) lorsqu'il est exécuté directement (même si /bin/sh est un alias à bash)


citation pour les downvoters:

L'interpréteur de commandes Bourne, ou sh, était l'interpréteur de commandes Unix par défaut de la version 7 D'Unix et la plupart des systèmes de type Unix continuent D'avoir /bin / sh - qui sera L'interpréteur de commandes Bourne, ou un lien symbolique ou un lien dur vers un interpréteur de commandes compatible - même lorsque des interpréteurs de commandes plus modernes sont utilisés par la plupart des utilisateur.

http://en.wikipedia.org/wiki//bin/sh

et:

les scripts Shell écrits avec des fonctionnalités spécifiques à Bash (bashismes) ne fonctionneront pas sur un système utilisant le shell Bourne ou l'un de ses remplacements, à moins que Bash ne soit également installé et que le script commence par une" ligne de shebang " de #!/bin/bash interprète la directive au lieu de #!/ bin / sh.

http://en.wikipedia.org/wiki/Bash_(Unix_shell)#Portabilité

0
répondu Samus_ 2012-01-09 00:15:08