The UNIX and Linux Forums  
Hola y bienvenida de los Estados Unidos a la UNIX y Linux Foros! Gracias por su visita y formar parte de nuestra comunidad global.

Go Back   El UNIX y Linux Foros > Arriba Foros > UNIX for Dummies Preguntas y Respuestas > Respuestas a las Preguntas más frecuentes > Consejos y tutoriales
.
google unix.com



Consejos y tutoriales Artículos útiles de nuestros usuarios.

Más UNIX y Linux Foro Temas usted puede encontrar útiles
Hilo Hilo para principiantes Foro Respuestas Último mensaje
De aprendizaje de Oracle ADF: Una Historia de principiante iBOT Oracle Actualizaciones (RSS) 0 04-06-2008 05:10 AM
CEP y la historia de los Peces iBOT Complejo de Procesamiento de Eventos Noticias RSS 0 12-17-2007 05:50 AM
Bangkok Post el artículo: La historia detrás del sistema operativo Linux Neo Noticias, Enlaces, Eventos y Anuncios 0 04-05-2003 09:05 AM

 
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
Linkback vínculo Herramientas de hilo Buscar en este Hilo Tasa de Hilo Modos de visualización
  #1 (Enlace permanente)  
Old 03-31-2007
Perderabo's Avatar
Perderabo Perderabo is offline Forum Staff  
Unix demonio
  
 

Fecha: agosto 2001
Ubicación: Ashburn, Virginia,
Mensajes: 9.111
Toda la historia de #! / usr / bin / ksh

Introducción

Originalmente, sólo había un intérprete de comandos en Unix. Cuando se llevó a cabo un comando, el shell intentará acogerse a alguno de la familia exec () las llamadas al sistema sobre el mismo. Si el comando es un ejecutable, que el éxito y ejecutar el comando se ejecute. Si la familia exec () no, el depósito no se dan por vencidos, sino que trataría de interpretar el archivo de comandos como si se tratara de un script de shell. Esto funciona correctamente siempre y cuando sólo hay un intérprete de comandos en el sistema. Pero lo que si está usando un shell como su interactivo y desea ejecutar un script escrito en otro idioma del shell?

Aquí es donde el #! truco viene pulg La idea de utilizar # para representar un comentario con su origen y fue rápidamente csh añadido a la bourne shell. Ahora todos los depósitos saber hacer caso omiso de cosas después de un #. Por lo tanto, podemos añadir una línea algo así como "#! / Usr / bin / ksh". Para el depósito de esta línea es sólo un comentario. Pero si el núcleo intenta ejecutar un archivo con esta línea, se especifica el intérprete exec y pasar el script a la misma. Así que los scripts de shell ejecutable convertido casi como reales son ejecutables. Ahora, cuando un shell intenta ejecutar un script de shell, tiene éxito.

¿Qué sucede si usted sale fuera de la #! línea? Así, el núcleo exec fallará. Su promedio de shell ahora intenta ejecutar el script en sí. A pocos depósitos intentará inspeccionar el script para tratar de adivinar el idioma. Esto no es bueno. Puede estar ejecutando ksh como su intérprete de comandos interactivo ksh y escribir guiones. Si más adelante cambiar a bash como un intérprete de comandos interactivo, algunas de sus secuencias pueden continuar a correr, mientras que otros pueden fallar. También la línea es un comentario que constituye una importante pista a un programador que se ve en la secuencia de comandos para su comprensión. Conocer la lengua en la que el autor está tratando de usar es una gran ayuda.

Si bien he utilizado el término "depósito", en realidad esta técnica se puede utilizar con muchos programas que no son los depósitos. Aquí es un "script" para mostrar un mensaje multilínea:
Código:
#! /usr/bin/cat
Line 1
Line 2 
Line 3
Esto mostrará que "#! / Usr / bin / cat" la línea, pero que no sea, funciona bastante bien.

La superación de un argumento

Usted puede pasar un solo argumento como este:
#! / usr / local / bin /perl -w
Pero, en general, se limitan a uno argumento. En la mayoría de los sistemas, una línea como: "#! / Algunos / intérprete-una-b" se traducirá en "-a-b" se pasa como único argumento. Sin embargo, el único argumento no se limita a partir de un guión. Podemos mejorar en nuestro mensaje de secuencia de comandos:
Código:
#! /usr/bin/sed 1d
Line 1
Line 2 
Line 3
Ejemplo

Vamos a poner todo esto junto con un ejemplo. Aquí hay una perl script que se llame perlargs:
Código:
#! /usr/local/bin/perl -w

#! /usr/local/bin/perl -w
print "script name is ", $0, "\n";
while (@ARGV) {
        $ARGV = shift @ARGV;
        print "argument ", $i++,  " is ", $ARGV, "\n";
}

system "ps -f -ww";

La pregunta-w perl cuestión de los mensajes de advertencia. El script simplemente muestra sus argumentos, luego ejecuta el comando ps. Cuando se ejecuta, me sale:
Código:
$ ./perlargs one two three
Name "main::i" used only once: possible typo at ./perlargs line 10.
script name is ./perlargs
argument 0 is one
argument 1 is two
argument 2 is three
                 UID        PID   PPID    STIME TTY     TIME CMD
                 perderabo   69      1 17:47:28 n01  0:00.24 /bin/ksh -l
                 perderabo  201     69 18:28:22 n01  0:00.03 /usr/local/bin/perl -w ./perlargs one two three
                 perderabo 2055    201 18:28:22 n01  0:00.01 ps -f -ww
$
Observe que el perl Se abre el proceso con 5 argumentos. El 2 º argumento es el nombre del script. Corresponde a la perl proceso para presentar los últimos 3 argumentos como la lista de argumentos visto por la secuencia de comandos. También comenzó a hacer realidad el núcleo de la perl proceso. Después de eso, corresponde a perl la secuencia de comandos para abrir y leer y ejecutar cada línea. Por esta razón, los scripts tienen que ser legible. No se puede ejecutar un script de no-lectura.

Conclusión

Esto debería ser suficiente información para comprender lo que está sucediendo con los #! líneas. En los siguientes puestos, voy a añadir más detalles sobre diversos aspectos del proceso.
 

Marcadores

Etiquetas
perl, perl cambio, shebang, turno, cambio de perl

Herramientas de hilo Buscar en este Hilo
Buscar en este Hilo:

Búsqueda avanzada
Modos de visualización Vota a este hilo
Vota a este hilo:

Normas de envío
puede que no nuevo puesto de hilos
puede que no enviar respuestas
puede que no enviar archivos adjuntos
puede que no editar sus puestos

Código BB es Encendido
Emoticones son Encendido
[IMG] código Encendido
Código HTML es Apagado
Trackbacks son Encendido
Pingbacks son Encendido
Refbacks son Encendido




Todas las horas son GMT -4. La hora es 08:49 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traducciones de idiomas Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Estudios
El UNIX y Linux Foros Contenido Copyright © 1993-2009. Todos los derechos Reserved.Ad Gestión por RedTyger

Las direcciones URL de contenido vBSEO 3.2.0