Shebang (Unix)

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 7 de septiembre de 2020; las comprobaciones requieren 6 ediciones .

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/sh

luego, 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]

Sintaxis

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]

Ejemplos

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.

Cita

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-x

Si 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 baz

entonces el resultado será el mismo que ejecutar el comando:

/bin/sh -x some/path/to/foo bar baz

Si 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!

Beneficios

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.

Portabilidad

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 python

En este caso, donde sea que se encuentre el intérprete de Python, se iniciará.

Véase también

Notas

  1. Guía avanzada de secuencias de comandos de Bash . Consultado el 19 de enero de 2012.
  2. 1 2 3 4 El #! magia, detalles sobre el mecanismo shebang/hash-bang . Consultado el 19 de enero de 2012.
  3. Cooper, Mendel. Guía avanzada de secuencias de comandos de Bash 5.3 Volumen  1 . - lulu.com, 2010. - Pág. 5. - ISBN 978-1-4357-5218-4 .
  4. MacDonald, Mateo. HTML5: El manual perdido  (neopr.) . - Sebastopol, California: O'Reilly Media , 2011. - Pág. 373. - ISBN 978-1-4493-0239-9 .
  5. Lutz, Mark. Aprendiendo Python  (indefinido) . — 4to. - O'Reilly Media , 2009. - Pág. 48. - ISBN 978-0-596-15806-4 .
  6. Lie Hetland, Magnus. Python principiante: de novato a  profesional . - Apress , 2005. - Pág. 21. - ISBN 978-1-59059-519-0 .
  7. Schitka, John. Guía de Linux+ para la certificación de Linux  (neopr.) . — Curso de Tecnología, 2002. - Pág. 353. - ISBN 978-0-619-13004-6 .
  8. 1 2 execve(2) - Página del manual de Linux . Consultado el 21 de octubre de 2010.
  9. SRFI 22
  10. Documentación de FPC instantáneo

Enlaces