Se implementa como un comentario para que cualquier cosa que entre en esa línea no sea "relevante" para el intérprete especificado. Por ejemplo, todos los lenguajes de secuencias de comandos tienden a comprender que una línea que comienza con #un comentario e ignorará la !/usr/bin/whateverparte, que de lo contrario podría ser un error de sintaxis en ese idioma en particular.
Por lo general, es el núcleo, no el shell, el que procesa esto. El shell simplemente llama a la exec()llamada del sistema en el archivo.
tripleee
47
Cuando intenta ejecutar un programa en Unix (uno con el conjunto de bits ejecutable), el sistema operativo observará los primeros bytes del archivo. Estos forman el llamado "número mágico", que se puede utilizar para decidir el formato del programa y cómo ejecutarlo.
#!corresponde al número mágico 0x2321 (búsquelo en una tabla ascii). Cuando el sistema ve ese número mágico, sabe que se trata de un guión de texto y lee hasta el siguiente \n(hay un límite, pero se me escapa). Una vez identificado el intérprete (el primer argumento después del shebang) llamará al intérprete.
Otros archivos también tienen números mágicos. Intente mirar un archivo de mapa de bits (.BMP) a través de lessy verá que los dos primeros caracteres son BM. Este número mágico denota que el archivo es de hecho un mapa de bits.
Si el archivo en el que vive este script es ejecutable, el hash-bang ( #!) le dice al sistema operativo qué intérprete usar para ejecutar el script. En este caso es /bin/sh, por ejemplo.
La primera línea le dice al shell que si ejecuta el script directamente (./run.sh; a diferencia de / bin / sh run.sh), debería usar ese programa (/ bin / sh en este caso) para interpretarlo.
También puede usarlo para pasar argumentos, comúnmente -e (salir en caso de error), o usar otros programas (/ bin / awk, / usr / bin / perl, etc.).
#!/bin/sho #!/bin/bashtiene que ser la primera línea del script porque si no lo usa en la primera línea, el sistema tratará todos los comandos en ese script como comandos diferentes. Si la primera línea es #!/bin/shentonces, considerará todos los comandos como un script y mostrará que este archivo se está ejecutando en pscomando y no los comandos dentro del archivo.
Stack Overflow no es Twitter. Tómese el tiempo para deletrear palabras como "u" y "1st". Estás ayudando a escribir un libro de referencia para que la gramática y la ortografía sean significativas. Además, preste atención al formato adecuado. Los comandos que se emitirían desde la línea de comandos, como ps, y los extractos de código como #!/bin/shdeberían formatearse.
The Tin Man
Traté de limpiar el inglés aquí, pero todavía no estoy seguro de lo que significa. Supongo que la respuesta intenta decir que los comandos en el script se ejecutarán como comandos distintos y agregar un shebang mostrará el script como un solo comando en una lista de procesos. Esto no es realmente cierto.
Respuestas:
Se llama shebang y le dice al shell principal qué intérprete se debe usar para ejecutar el script.
p.ej
Se implementa como un comentario para que cualquier cosa que entre en esa línea no sea "relevante" para el intérprete especificado. Por ejemplo, todos los lenguajes de secuencias de comandos tienden a comprender que una línea que comienza con
#
un comentario e ignorará la!/usr/bin/whatever
parte, que de lo contrario podría ser un error de sintaxis en ese idioma en particular.fuente
exec()
llamada del sistema en el archivo.Cuando intenta ejecutar un programa en Unix (uno con el conjunto de bits ejecutable), el sistema operativo observará los primeros bytes del archivo. Estos forman el llamado "número mágico", que se puede utilizar para decidir el formato del programa y cómo ejecutarlo.
#!
corresponde al número mágico 0x2321 (búsquelo en una tabla ascii). Cuando el sistema ve ese número mágico, sabe que se trata de un guión de texto y lee hasta el siguiente\n
(hay un límite, pero se me escapa). Una vez identificado el intérprete (el primer argumento después del shebang) llamará al intérprete.Otros archivos también tienen números mágicos. Intente mirar un archivo de mapa de bits (.BMP) a través de
less
y verá que los dos primeros caracteres sonBM
. Este número mágico denota que el archivo es de hecho un mapa de bits.fuente
Si el archivo en el que vive este script es ejecutable, el hash-bang (
#!
) le dice al sistema operativo qué intérprete usar para ejecutar el script. En este caso es/bin/sh
, por ejemplo.Hay un artículo de Wikipedia al respecto para obtener más información.
fuente
La primera línea le dice al shell que si ejecuta el script directamente (./run.sh; a diferencia de / bin / sh run.sh), debería usar ese programa (/ bin / sh en este caso) para interpretarlo.
También puede usarlo para pasar argumentos, comúnmente -e (salir en caso de error), o usar otros programas (/ bin / awk, / usr / bin / perl, etc.).
fuente
#!/bin/sh
o#!/bin/bash
tiene que ser la primera línea del script porque si no lo usa en la primera línea, el sistema tratará todos los comandos en ese script como comandos diferentes. Si la primera línea es#!/bin/sh
entonces, considerará todos los comandos como un script y mostrará que este archivo se está ejecutando enps
comando y no los comandos dentro del archivo.fuente
ps
, y los extractos de código como#!/bin/sh
deberían formatearse.