Bash dice que el archivo no existe, pero sí

11

Estoy tratando de 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.

Avery3R
fuente
¿Cuál es la salida de ls -la para ese archivo en particular?
user389238
@Ansis -rwxrwxrwx 1 1011 1011 31991 18 de mayo de 2006 mkdep
Avery3R
1
muéstrenos la línea de su script y el mensaje de error exacto. ¿Cuál es su directorio actual cuando intenta invocar el archivo "perdido"?
Glenn Jackman
@glenn No es mi script lo que lo invoca, es el archivo MAKE de Cisco, no puedo obtener el mensaje de error exacto ya que se está ejecutando en un vm, pero, bash: / pathto / mkdep no se encuentra el archivo o carpeta
Avery3R
Así que ahí es donde se esconden esos trolls ...
Avance

Respuestas:

8

Usted mencionó 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 haga una nueva máquina virtual de 32 bits y compílela allí.

bahamat
fuente
1
Si instala ia32-libs, debería funcionar después. No es necesario crear una máquina virtual de 32 bits.
Phil
5

¿Está configurado para ser ejecutable? Si no, entonces chmod +x filename. ¿Está en tu RUTA? Si no, entonces llámalo como ./filenamealgo más que simplemente filename.

precioso
fuente
Está configurado como ejecutable, he hecho ./mkdep para llamarlo, así como usar la ruta completa, sin dados.
Avery3R
Es posible que deba ejecutar el archivo como sudo.
D'Arvit
2

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 se nombra los archivos mkdep, publicaría la salida de

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

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

execve ("/ bin / ls", ["ls"], [/ * 22 vars * /]) = 0
brk (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
RedGrittyBrick
fuente
(ejecutándose en vm, demasiado vago para escribir todo) ./mkdep devuelve el archivo o carpeta no encontrado. presentar declaraciones de mkdep exe duende de 32 bits, y mkdep cabeza devuelve los datos binarios
Avery3R
1
¿mkdep posiblemente está generando este mensaje porque no puede encontrar el archivo que necesita?
Linker3000
@ linker3000: No, dice Bash: / dirto / mkdep: archivo o carpeta no encontrado
Avery3R
@MMavipc: intente strace ./mkdep 2>mkdep.strace.txtesto debería darle una idea de lo que está sucediendo. Es posible que deba instalar strace desde los repositorios.
RedGrittyBrick
1

¿Estás cambiando IFS en tu script? También encontré el mismo problema en uno de mis scripts y pensé lo mismo (el archivo de 32 bits se lee mediante un script de shell en una máquina de 64 bits). Pero ese no era el problema en mi caso. En cambio, estaba cambiando IFS a coma 'y' 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.

Abhijit Buchake
fuente