PDA

Ver la Versión Completa : Diferencia entre ejecutar un script bash usando sh y ./



Xripox
29/04/2011, 16:58
[Only registered and activated users can see links]


Esta misma pregunta puede surgir al utilizar cualquier tipo de script, no sólo los de bash. ¿Hay alguna diferencia importante entre ejecutar un script a través del intérprete y ejecutarlo directamente?

Cuando ejecutás un script pasando el nombre de archivo del script a un intérprete (sh, python, perl, etc.), en realidad estás ejecutando el intérprete pasándole como argumento el programa que quieres ejecutar. Por ejemplo, ejecutamos el intérprete sh pasándole el argumento miscript.sh.


sh miscript.sh


Si ejecutás el script por sí solo, el sistema va a llamar al intérprete que necesite y, luego sí, ejecutará el script pasándolo como argumento al intérprete, pero todo en forma automática y sin que el usuario que ejecutó el script se entere.


./miscript.sh


Para poder ejecutar un script por sí solo deben cumplirse 2 condiciones:

1) el script debe incluir un "bang line". Se trata de la primera línea de un script, que debe comenzar con los caracteres #! y que debe especificar la ruta en la que se encuentra el intérprete. Es importante notar que esta condición se cumple para cualquier tipo de script (python, perl, etc.), no sólo los de bash.

Así, por ejemplo, nuestro script debería contener como primera línea lo siguiente:


#!/bin/bash


2) el archivo debe tener permisos de ejecución:

Para otorgar permisos de ejecución a nuestro script, debemos escribir:


chmod a+x miscript.sh

Listo, ahora sólo basta con ejecutarlo así:


./miscript.sh

O copiando el script a una ruta "especial" que permita invocarlo fácilmente. Por ejemplo, podemos copiarlo en /usr/sbin y ejecutarlo desde cualquier parte sin incluir la ruta completa donde se encuentre:

Copiamos:


sudo cp miscript.sh /usr/sbin/miscript

Ejecutamos:


miscript

Como ves, en realidad lo que ocurre detrás de escena es muy similar en ambos casos. Sin embargo, al incluir una "bang line", tus scripts serán mucho más fáciles de distribuir, ya que los usuarios no deberán recordar la ruta en la que se encuentran los intérpretes necesarios para poder ejecutarlos. Conclusión: es básicamente una cuestión de comodidad.




Visto en Usemos Linux ([Only registered and activated users can see links])