Estoy en un kali linux de 64 bits.
He creado un script de Python que necesita 2 argumentos para comenzar. No quiero escribir cada vez exactamente las mismas rutas o buscar en el historial de los comandos que usé en la terminal. Así que decidí crear un script simple que llame al script de Python con sus argumentos.
#! /bin bash python CreateDB.py ./WtfPath ./NoWtfPath/NewSystem/
Es exactamente el mismo comando que usaría en la terminal. Sin embargo, recibo un mensaje de error cuando intento ejecutar el archivo de secuencia de comandos.
bash: ./wtf.sh: /bin: bad interpreter: Permission denied
wtf.sh tiene derechos ejecutables.
¿Qué pasa?
Respuesta
Aquí tiene un espacio en lugar de una barra diagonal:
#! /bin bash
Debería ser:
#! /bin/bash
o simplemente
#!/bin/bash
(el primer espacio es opcional). El shebang (#!
) debe ir seguido de la ruta a un ejecutable , que puede ir seguida de un argumento , por ejemplo,
#!/usr/bin/env sh
En este caso /usr/bin/env
es el ejecutable; consulte man env
para obtener más detalles.
Solo /bin
se refiere a un directorio.
Comentarios
Respuesta
Vale la pena señalar que si el punto de montaje en el que reside su script tiene el atributo «noexec», entonces puede cambiar todo lo que quiera y aún así no funcionará, pero invocar al intérprete con el script como argumento sí lo hará (siempre que que a su vez no intenta ejecutar otro script en un montaje noexec).
#!/bin/sh
(en lugar de#!/bin/bash
) a menos que sepa que está usandobash
funciones.sh
solo cuando sé que ' m no usando funciones de bash).which bash
es útil. Eso devuelve/bin/bash
. En la parte superior de mi script Bash agrego#!/bin/bash
. Luego, cuando quiero ejecutar el script Bash, ingresobash foo.sh
. Entonceswhich sh
se usa de la misma manera.sh foo.sh
/bin/sh
es algo diferente a Bash y hay Bashisms inadvertidos en el script). Vea aquí.