Qu'est-ce que l'utilisation et la signification de “#!/bin/sh” dans les scripts shell?
Qu'est-ce que l'utilisation et la signification de "#!/bin/sh
" dans les scripts shell? S'il vous plaît laissez-moi savoir si il est considéré dans le script ou pas comme il est commenté.
Vous devez vous connecter pour publier un commentaire.
Source: http://tldp.org/LDP/abs/html/sha-bang.html#MAGNUMREF
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 qui représente l'environnement du système. En fait, il est généralement mis en œuvre comme un lien symbolique pointant vers le fichier exécutable pour le shell est un shell système
C'est le chemin où le shell exécutable se trouve.
Il est utilisé par le système d'exploitation régulière des fichiers qui ont le bit d'exécution défini. Si le fichier n'est pas reconnu comme un "pur" format binaire (c'est à dire, ELFE ou NAIN, ou autres), le système d'exploitation tente et lit
#!/path/to/interpreter -plus -options
et transforme:dans:
Il organise également pour argc et argv correcte (c'est à dire, argv[0] sera votre nom de script, et argv[1] en cours de l'option 1, etc).
Cela fonctionne aussi pour les scripts perl, python scripts et autres joyeusetés. En fait, quelle que soit l'interprète de votre choix.
cela signifie que votre script va s'exécuter en mode de compatibilité (POSIX) lorsqu'il est exécuté directement (même si
/bin/sh
est un alias bash)citations pour les downvoters:
http://en.wikipedia.org/wiki//bin/sh
et:
http://en.wikipedia.org/wiki/Bash_(Unix_shell)#Portabilité
/bin/sh
n'est pas réellement le Bourne-shell sh dans compatible POSIX systèmes, il signifie "tout à POSIX compilant shell" et c'est en partie le cahier des charges lorsque vous l'utilisez, vous êtes en indiquant que vous êtes en train de rédiger POSIX-sh code quel que soit le shell utilisé, car dans le cas de bash, il s'exécute en mode de compatibilité (autres coquilles peuvent se comporter différemment, mais la seule assurance de ce beau spectacle, c'est que vous avez et le faire POSIX)./bin/sh
est en quelque sorte la magie, et provoque un bourne-compatible shell à exécuter par le noyau, indépendamment de l'endroit où/bin/sh
est lié. Non: si/bin/sh
est lié symboliquement à bash, est bash qui est exécuté, mais bash spots qu'il a été invoqué sous le nom desh
, et, en conséquence, s'exécute en mode de compatibilité, où il agit comme historique/POSIXsh
./bin/sh
est un élément du système de fichiers comme les autres mais cela ne veut pas forcément dire que c'est une coquille, en particulier, et spécialement ne signifie pas qu'il doit être Bourne-sh, il pourrait être ou il pourrait être quelque chose d'autre (il peut même ne pas exister) donc vous ne pouvez pas présumer de rien d'autre que POSIX-sh caractéristiques et uniquement si vous êtes dans une POSIX-compilant l'environnement parce que POSIX exige.