He creado un script bash pero cuando intento ejecutarlo, obtengo
#!/bin/bash no such file or directory
Necesito ejecutar el comando: bash script.sh
para que funcione.
¿Cómo puedo arreglar esto?
bash
shell-script
executable
shebang
Nicolas de Fontenay
fuente
fuente
#!/usr/bin/env bash
en lugar de#!/bin/bash
explorar igualmente aquí ...Respuestas:
Este tipo de mensaje generalmente se debe a una línea shebang falsa, ya sea un retorno de carro adicional al final de la primera línea o una lista de materiales al comienzo de la misma.
Correr:
y mira cómo termina.
Esto está mal:
Esto también está mal:
Esto es correcto:
Utilizar
dos2unix
(osed
,tr
,awk
,perl
,python
...) para fijar la secuencia de comandos si este es el problema.Aquí hay uno que eliminará tanto una lista de materiales como las CR de colas:
Tenga en cuenta que el shell que está utilizando para ejecutar el script afectará levemente los mensajes de error que se muestran.
Aquí hay tres scripts que solo muestran su nombre (
echo $0
) y tienen las siguientes líneas shebang respectivas:correctScript:
scriptWithBom:
scriptWithCRLF:
En bash, ejecutarlos mostrará estos mensajes:
Ejecutar los falsos llamando explícitamente al intérprete permite que el script CRLF se ejecute sin ningún problema:
Aquí está el comportamiento observado bajo
ksh
:y debajo
dash
:fuente
hexdump -C yourscript | head -n 1
. Todavía lo usaríados2unix yourscript
para arreglarlo.#!/bin/bash no such file or directory
mensaje de error, ya que no hay razón para que algo intente ejecutarse o abrirse#!/bin/bash
. Es/bin/bash<CR>
lo que se ejecutaría.dos2unix
también elimina una lista de materiales UTF-8. Una lista de materiales UTF-8 podría haber explicado el mensaje de error.Esto también puede ser causado por una lista de materiales en un script UTF-8. Si creas el script en Windows, a veces obtienes algo de basura al comienzo del archivo.
fuente
En realidad, el shebang correcto para el script bash es este:
Porque, en freeBSD, bash se encuentra en
/usr/local/bin/bash
fuente
Puede usar vi para solucionar ambos problemas si existen:
fuente
Si no tiene dos2unix, esta es una forma de solucionar este problema.
fuente
Marca de orden de bytes (BOM)
Esto podría ser causado por una lista de materiales. De Wikipedia, una lista de materiales es un
Desafortunadamente, no indica nada al kernel de Linux que maneja la línea she-bang. Puede verificar que tiene una lista de materiales utilizando
file
,O bien, puede hexdump los primeros caracteres y ver si coinciden con alguno de los caracteres BOM manualmente
Puede quitar los caracteres de la lista de materiales una vez que los conozca así,
fuente
Tuve el problema al agregar accidentalmente un ejecutable bash incorrecto al
PATH
y porque en mi script#!/usr/bin/env bash
se usó el shebang más flexible (tome el primer ejecutable bash de la ruta).He instalado GIT para Windows para que funcione
cygwin
junto con las GUI de Windows GIT (no funcionaba con cygwin native git ...).#!/bin/bash
Resolví esto ahora cambiando a sheband y eliminando GIT para WindowsPATH
.fuente
Tratar
#!/bin/bash
Segunda cosa:
find / -name bash
Tercera cosa:
ls -al /bin/bash
fuente
which bash
. Sabemos que está encontrando uno porque está funcionandobash script.sh
.