Shebang ( inglés shebang , sha-bang , [1] [2] [3] hashbang , [4] [5] pound-bang , [2] [6] o hash-pling [2] [7] ) - en programación , una secuencia de almohadillas y un signo de exclamación ( " #! ") al comienzo de un archivo de secuencia de comandos .
Cuando una secuencia de comandos con shebang se ejecuta como un programa en sistemas operativos similares a Unix, el cargador de programas trata el resto de la línea después del shebang como el nombre de archivo del programa intérprete . El cargador ejecuta este programa y le pasa el nombre del archivo de script con el shebang como parámetro. [8] Por ejemplo, si el nombre completo del archivo de script es " path/to/script" y la primera línea de este archivo es:
#!/bin/shluego, el gestor de arranque ejecutará " /bin/sh" (generalmente un shell Bourne o un intérprete de línea de comandos compatible) y pasará " path/to/script" como primer parámetro.
El intérprete suele omitir la línea shebang, ya que el carácter "#" es el carácter de inicio de los comentarios en muchos lenguajes de secuencias de comandos. Algunos intérpretes que no usan el carácter hash para marcar el inicio de los comentarios (como Scheme ) pueden omitir la línea shebang, lo que define su propósito. [9] Otras soluciones se basan en un preprocesador que procesa y elimina la línea shebang antes de que el resto del script pase al compilador o intérprete. Así, por ejemplo, funciona InstantFPC , que permite ejecutar programas escritos en Free Pascal como scripts en algunos sistemas operativos. [diez]
La cadena shebang tiene el siguiente formato: [8]
#! intérprete [ arg-opcional ]El intérprete debe ser una ruta absoluta a un archivo de programa ejecutable [1] (si el intérprete es un script, también debe comenzar con un shebang). El argumento opcional opcional debe estar en formato de argumento único (por razones de portabilidad, no debe contener espacios). ¡ Espacio después de #! es opcional. [2]
Algunas líneas típicas de Shebang:
Las líneas shebang pueden contener argumentos adicionales que se pasan al intérprete (consulte el ejemplo de Perl anterior). Sin embargo, dado que el manejo de los argumentos puede variar, para la portabilidad, es mejor usar solo un argumento sin espacios en su interior. A continuación se proporcionan más pautas de portabilidad.
La especificación de un intérprete en la línea shebang permite que los archivos de script y de datos se utilicen como comandos del sistema, lo que oculta los detalles de implementación de los usuarios y otros programas al eliminar la necesidad de especificar el archivo del intérprete en la línea de comandos antes del archivo de script.
Supongamos que el script de shell de Bourne está en el archivo " some/path/to/foo ", cuya primera línea es
#!/bin/sh-xSi el usuario intenta ejecutar este archivo de script usando la línea de comando (especificando "bar" y "baz" como argumentos)
algún/camino/hacia/foo bar bazentonces el resultado será el mismo que ejecutar el comando:
/bin/sh -x some/path/to/foo bar bazSi la ruta " /bin/sh " es un programa de shell Bourne , entonces "bar" y "baz" se asignarán a los parámetros posicionales del $1shell $2, y todas las líneas del archivo " some/path/to/foo " ejecutarse como comandos de este shell. Además, dado que el carácter de libra es el carácter de inicio de comentario en el shell Bourne (y muchos otros shells), se omitirá la línea shebang.
Sin embargo, depende del propio intérprete determinar el procesamiento final de la cadena shebang. Por lo tanto, un script que contenga las siguientes dos líneas simplemente imprimiría ambas líneas en la salida estándar :
#!/papelera/gato ¡Hola Mundo!En comparación con el uso de la asignación global de una extensión de archivo a una aplicación de intérprete, especificar una cadena de invocación de intérprete en un shebang le permite especificar un intérprete que no se conoce globalmente y que no requiere privilegios de administrador del sistema. El shebang también le permite especificar un intérprete individualmente para un archivo, sin introducir el concepto complicado de un espacio de nombres para asignar una sola extensión a múltiples intérpretes.
El shebang debe proporcionar una ruta absoluta (o una ruta relativa al directorio de trabajo actual) para los archivos ejecutables. Esto puede generar problemas para los sistemas con una estructura de sistema de archivos no estándar. Incluso en sistemas con directorios bastante estándar, es posible que las variantes del mismo sistema operativo almacenen el intérprete deseado en diferentes lugares. Python , por ejemplo, podría estar en /usr/bin/python , /usr/local/bin/python , o incluso en /home/ username /bin/python si lo instaló alguien que no sea el administrador del sistema.
Por lo tanto, para una mejor portabilidad, se usa /usr/bin/env, que tiene la capacidad de buscar un programa en PATH , por ejemplo:
#!/usr/bin/env pythonEn este caso, donde sea que se encuentre el intérprete de Python, se iniciará.