¿Qué es eso del error "shebang"?
Un error shebang, es un error en el que no se encuentra el intérprete especificado en la primera línea del script
En el caso de un script bash linux lo podemos comenter con un error tan aparentemente inocente como empezar los scripts con la línea:
#/bin/bash
En lugar de:
#!/bin/bash
Desde luego comerse el carácter ! es un error fácil de cometer pero es un error y, aunque la mayoría de las veces el script se ejecuta con bash sin mayores problemas puede confundir a tu editor de código, también es una mala práctica que puede producir en el futuro misteriosos errores que nos vuelvan locos buscándolos.
Lo normal es que te des cuenta cuanto ya tienes cientos de archivos bash con el error, ¿que harías? ¿abrir cada uno de los archivos y cambiar esa primera línea a mano, seguro que cometes nuevos errores, así que lo mejor sería entrar en cada directorio afectado y ejecutar sed tal que así:
sed -i '1s|^#/bin/bash|#!/bin/bash|' *
Así de una tacada arreglo todos los archivos del directorio.
Hay que tener cuidado con estos comandos porque son muy poderosos y te lo cambian todo, para mayor seguridad:
- Asegurarse que estamos en el directorio correcto, es fácil hacer que recorra todos los subdirectorios, pero por ahora lo dejamos para un futuro artículo
- Le pasamos el parámetro -i para que haga los cambios sin hacer copias temporales, así que hay que tener cuidado porque no hay vuelta atrás.
- En la cadena ponemos 1s antes de la tubería para que cambie solo la primera línea y empiece la búsqueda al principio de ésta.
- Bueno, en realidad no me he tirado sin red, ya que los cambios en el repositorio está controlados por git, si algo sale mal se puede volver atrás y se puede saber exactamente que se ha cambiado, a la línea y al caracter.
Esta es la potencia de bash en GNU/Linux, que hace el trabajo duro en lugar de nosotros.
Por cierto, hay errores shebang todavía más difíciles de detectar y normalmente se producen por usar editores patateros de Windows:
- Los saltos de línea deben ser estilo unix, así que te vas a ahorrar muchos quebraderos de cabeza usando GNU/Linux. Y no macOS no tiene los mismos saltos, aunque esté basado en un unix, los de la manzana también son especialitos con estos (son distintos a los de Linux/Unix y también a los de Windows).
- Los editores no profesionales como el blog de notas de Windows tienen a introducir caracteres invisibles que no vemos pero nuestro sistema sí, estos errores son muy difíciles de detectar y corregir. ¿por qué lo hacen? ellos sabrán...

No hay comentarios:
Publicar un comentario