Es una convención por lo que el shell * nix sabe qué tipo de intérprete ejecutar.
Por ejemplo, sabores anteriores de ATT por defecto en sh (el shell Bourne), mientras que las versiones anteriores de BSD por defecto en CSH (la C shell).
Incluso hoy en día (donde la mayoría de los sistemas corren bash, el "Bourne Again Shell" ), los scripts pueden ser en bash, Python, Perl, Ruby, PHP, etc, etc. Por ejemplo, podría ver #!/bin/perl
o #!/bin/perl5
.
PS: El signo de exclamación (!
) se le llama cariñosamente "explosión". El símbolo de comentario de shell (#
) a veces se llama "hash".
PPS: Recuerde - bajo * nix, asociando un sufijo con un tipo de archivo no es más que una convención , no una "regla" . Un ejecutable puede ser un programa binario, cualquiera de un millón de tipos de script y otras cosas también. De ahí la necesidad de #!/bin/bash
.
No es necesario y no debe hacerlo a menos que no tenga otra opción. Use '#!/Bin/sh' mientras pueda y aprenda sobre la diferencia entre un shell (POSIX) y bash. Llegará un día antes de que su currículum crezca demasiado tiempo, cuando se encuentre en un sistema con un shell diferente y aún desee que sus scripts funcionen. – Jens
Se pronuncia "Hash-Bang" o "She-Bang". – Beachhouse
Creo que vale la pena señalar que esto solo se ejecuta si ejecuta el script como un archivo ejecutable. Entonces, si configura el marcador ejecutable y luego escribe './Yourscript.extension', por ejemplo,'./Helloworld.py' o './Helloworld.sh', buscará el intérprete en esa línea superior, lo que haría ser '#!/bin/python' o'! #/bin/bash', mientras que al ejecutar el script como 'python helloworld.py', la primera línea no se observará porque está comentada. Entonces, es una secuencia especial para el shell/kernel. – JFA