Bash dice que el archivo no existe, pero sí

Bash dice que el archivo no existe, pero sí

Estoy intentando compilar el firmware para mi linksys WRVS4400N.

lsmuestra que existe pero cuando intenta ejecutarlo, bash dice que no existe. También puedo cathacerlo, y es un ejecutable, no un script de shell.

Respuesta1

Mencionaste que la salida de file mkdepes 32-bit elf. Estás ejecutando una máquina virtual de 64 bits.

Ejemplo:

$ uname -m
x86_64
$ ls -l ./example 
-rwxr-xr-x 1 root root 92312 2011-08-18 16:52 ./example
$ file ./example 
example: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, stripped
$ ./example 
-bash: ./example: No such file or directory

Simplemente cree una nueva máquina virtual de 32 bits y compílela allí.

Respuesta2

¿Está configurado para ser ejecutable? Si no entonces chmod +x filename. ¿Está en tu RUTA? Si no es así, llámelo como ./filenameen lugar de simplemente filename.

Respuesta3

Cuando intenta ejecutar un archivo y bash dice que no existe, a veces significa que bash cree que el archivo es un script y que el intérprete especificado en la primera línea (#!) no existe.

Si los archivos tienen nombre, mkdeppublicaría el resultado de

./mkdep
file mkdep
hd mkdep | head
strace ./mkdep 2>mkdep.strace.txt

El comando strace brinda información sobre las llamadas al sistema realizadas, por ejemplo, strace ls 2>ls.tcoloca lo siguiente en ls.t

execve("/bin/ls", ["ls"], [/* 22 vars */]) = 0
freno(0) = 0x8061000
acceso("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No existe tal archivo o directorio)
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f82000
acceso("/etc/ld.so.preload", R_OK) = -1 ENOENT (No existe tal archivo o directorio)
abierto("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=32311, ...}) = 0
mmap2(NULL, 32311, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f7a000
cerrar(3) = 0
acceso("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No existe tal archivo o directorio)
abierto("/lib/librt.so.1", O_RDONLY) = 3
leer(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\240\ 30\0\0004\0\0\0"..., 512) =512
fstat64(3, {st_mode=S_IFREG|0644, st_size=30624, ...}) = 0

Respuesta4

¿Estás cambiando IFS en tu script? Yo también encontré el mismo problema en uno de mis scripts y pensé lo mismo (el script de shell lee un archivo de 32 bits en una máquina de 64 bits). Pero ese no fue el problema en mi caso. En cambio, estaba cambiando IFS a coma ',' y volviendo a una nueva línea que de alguna manera confundió al analizador y causó este error.

¡Acabo de eliminar cualquier cambio en IFS y ahora funciona bien!

información relacionada