Permiso de script de Bash denegado & Intérprete incorrecto

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

  • ¡Maldita sea, tonta de mí! ¡Gracias! ¿No ' no vi que …
  • Es posible que desee adquirir el hábito de usar #!/bin/sh (en lugar de #!/bin/bash) a menos que sepa que está usando bash funciones.
  • @ G-Man Gracias por limpiar este Subir un poco. WRT bash vs. sh, solo estaba siguiendo el patrón de la pregunta (aunque mi tendencia es usar sh solo cuando sé que ' m no usando funciones de bash).
  • En la terminal de Ubuntu, 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, ingreso bash foo.sh. Entonces which sh se usa de la misma manera. sh foo.sh
  • @ G-Man, en el mundo laboral hay una cantidad desafortunada de personas que no ' t saber si están usando funciones de Bash o no. En muchos casos, ' es preferible que un script no se ejecute en absoluto (porque Bash se especifica en el shebang pero no se encuentra) en lugar de ejecutar y hacer algo inesperado (porque /bin/sh es algo diferente a Bash y hay Bashisms inadvertidos en el script). Vea aquí.

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).

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *