¿Qué es un Hashbang(#!)?


Un shell script no es más que un conjunto de comandos almacenados dentro de un archivo. Por lo regular, estos archivos sirven para automatizar tareas de uso diario. Ejemplo de un shell script:

#! /bin/bash

while :

do

who

sleep 600; # Parar por 5 minutos.

done

No existe nada inusual en este script, tan son sólo son un conjunto de comandos que podrían haber sido insertados uno a uno dentro de la línea de comandos. La ventaja de colocar comandos dentro del script van más allá de no tener que tipear los comandos una y otra vez. El script se vuelve una herramienta que puede ser modificada y personalizada fácilmente. Ejemplo del shell script mostrado anteriormente un poco más sofisticado:

#! /bin/bash

#Shell Script para mostrar los usuarios conectados al servidor en un intervalo de 5 minutos.

#Variables

SEGUNDOS=600 # Tiempo a esperar para mostrar usuarios.

while :

do

who

sleep $SEGUNDOS

done

Un Hashbang (#!), comunmente llamado She-Bang en la cabecera de un script, le indica al sistema que el fichero contiene un conjunto de comandos los cuales deberán ser ejecutados por el intérprete especificado. El símbolo #!, es lo que se conoce como un numero mágico de 2 bytes, es decir un marcador especial que define un tipo de archivo.

Seguido del Hashbang, se especifica una ruta. Esta es la ruta que apunta al programa que interpretará los comandos del script. Entonces, este intérprete de comandos ejecutará los comandos empezando desde el renglón que le sigue a la línea donde se especificó el hashbang e ignorando comentarios. Ejemplos:

#!/bin/sh
#!/bin/bash
#!/usr/bin/perl
#!/usr/bin/tcl
#!/bin/sed -f
#!/usr/awk -f

Cada una de las cabeceras mencionadas especifican un intérprete de comandos diferentes. Nótese que el hashbang especificado debe ser capaz de ejecutar los comandos contenidos en el script, ya que de otra forma no podrá ejecutar dichos comandos y desplegará el mensaje “Command not found”.

El símbolo #! puede ser omitido si el script consiste solamente de un conjunto de comandos genéricos del sistema y no de un grupo de directivas especificas de un shell en particular.

Anuncios

Un comentario el “¿Qué es un Hashbang(#!)?

  1. Porque pones un espacio entre el shebang y el path del interprete? entiendo que en versiones anteriores asi se hacia pero cual es la ventaja o para que lo haces?

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s