2012-04-17 9 views
11

que he visto tanto:Perl: Shebang (¿espacio?) "#!"?

#!/path/... 
#! /path/... 

Lo que es correcto? ¿Importa? ¿Hay una historia?

He oído que una versión antigua de Unix requiere que no haya espacio. Pero luego escuché que era solo un rumor. ¿Alguien sabe con certeza?


Editar: no se me ocurría qué mejor lugar para preguntar esto. Está relacionado con la programación, ya que el espacio podría hacer que el programa funcione de una manera diferente, por lo que sé. Por lo tanto, lo pregunté aquí.

+0

Si usted ha visto tanto y tanto trabajo, sería razonable que se trata de una cuestión de preferencia/estético. –

+2

No estoy seguro de cómo esto _no se relaciona con la programación. – ergosys

+0

@JustinPearce: no es una suposición segura; es posible que algunos sistemas no permitan un espacio después del '#!', lo que haría que la versión no tenga espacio más portátil. Pero como resulta, es probable que todos los sistemas permitan espacios en blanco; ver mi respuesta para más detalles. –

Respuesta

17

También tengo una vaga memoria de que el espacio en blanco no estaba permitido en algunos sistemas antiguos tipo Unix, pero un poco de investigación no lo admite.

Según this Wikipedia article, la sintaxis #! se introdujo en la versión 8 de Unix en enero, el anuncio inicial de 1980. Dennis Ritchie de esta función dice:

El sistema ha sido cambiado por lo que se inicia si un archivo que está siendo ejecutado con los personajes mágicos #! , el resto de la línea se entiende como ser el nombre de un intérprete para el archivo ejecutado. Anteriormente (y de hecho todavía) el caparazón hizo gran parte de este trabajo; se ejecutó automáticamente en en un archivo de texto con modo ejecutable cuando el nombre del archivo de texto se escribió como un comando. Al poner la instalación en el sistema , se obtienen los siguientes beneficios.

[SNIP]

Para aprovechar esta maravillosa oportunidad, puso

#! /bin/sh 

en el margen izquierdo de la primera línea de sus shell scripts. Espacios en blanco después! están bien. Use una ruta completa (no se realiza ninguna búsqueda). En el momento , toda la línea está restringida a 16 caracteres, pero se aumentará este límite .

Es concebible que algunos más tarde sistema Unix apoyó la sintaxis #! pero no permitió espacios en blanco después de la !, pero teniendo en cuenta que la primera aplicación explícitamente permitido espacios en blanco, que parece poco probable.

La respuesta de leonbloy proporciona algo más de contexto.

ACTUALIZACIÓN:

El intérprete de Perl sí reconoce una línea que comienza con #!, incluso en los sistemas en los que no se reconoce por el núcleo. Ejecute perldoc perlrun o vea this web page para más detalles.

The #! la línea siempre se examina para los interruptores ya que la línea se está procesando . Por lo tanto, si está en una máquina que permite solo un argumento con el #! línea, o peor, ni siquiera reconoce el #! línea, usted todavía puede obtener un comportamiento de conmutación constante independientemente de cómo se invocó Perl , incluso si se utilizó -x para encontrar el comienzo del programa.

Perl también permite espacios en blanco después del #!.

(Personalmente, prefiero escribir la línea #! y sin espacios en blanco, pero va a trabajar de cualquier manera.)

+0

Gracias por la oportunidad de ampliar mi comprensión, Keith. Mi shell-fu no es tan bueno como podría ser así que mi suposición fue hecha con mi experiencia limitada. Aprenda algo nuevo cada día. :RE –

9

Parece que generalmente funciona en ambos sentidos. See here. Diría que la versión sin espacio es mucho más común hoy y, para mí, mucho más atractiva.

Por cierto, esto no está específicamente relacionado con Perl (pero definitivamente está relacionado con la programación).

+1

Ese enlace es tan increíblemente investigado que un +1 se te escapa :) – ikegami

Cuestiones relacionadas