Estoy intentando compilar el firmware para mi linksys WRVS4400N.
ls
muestra que existe pero cuando intenta ejecutarlo, bash dice que no existe. También puedo cat
hacerlo, y es un ejecutable, no un script de shell.
Respuesta1
Mencionaste que la salida de file mkdep
es 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 ./filename
en 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, mkdep
publicarí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.t
coloca 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!