Bash dice che il file non esiste, ma esiste


11

Sto cercando di compilare il firmware per il mio linksys WRVS4400N.

lsmostra che esiste ma quando tenta di eseguirlo bash dice che non esiste. Posso anche catfarlo, ed è un eseguibile, non uno script di shell.


qual è l'output di ls -la per quel particolare file?
user389238

@Ansis -rwxrwxrwx 1 1011 1011 31991 18 maggio 2006 mkdep
Avery3R

1
mostraci la riga del tuo script e il messaggio di errore esatto. Qual è la tua directory corrente quando provi a invocare il file "mancante"?
Glenn Jackman,

@glenn Non è il mio script che lo sta invocando, è il makefile di Cisco, non riesco a ottenere il messaggio di errore esatto poiché è in esecuzione in un vm, ma, bash: file / pathto / mkdep o cartella non trovata
Avery3R

Ecco dove si nascondono quei troll ...
Breakthrough

Risposte:


8

Hai detto che l'output di file mkdepè 32-bit elf. Stai eseguendo una VM a 64 bit.

Esempio:

$ 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

Basta creare una nuova macchina virtuale a 32 bit e compilarla lì.


1
Se installi ia32-libs, dovrebbe funzionare in seguito. Non è necessario creare una macchina virtuale a 32 bit.
Phil

5

È impostato per essere eseguibile? Altrimenti, allora chmod +x filename. È nel tuo PERCORSO? In caso contrario, chiamalo come ./filenamenon solo filename.


È impostato su eseguibile, ho fatto ./mkdep per chiamarlo e usare il percorso completo, senza dadi.
Avery3R,

Potrebbe essere necessario eseguire il file come sudo.
D'Arvit,

2

Quando si tenta di eseguire un file e bash dice che non esiste a volte significa che bash ritiene che il file sia uno script e che l'interprete specificato nella prima riga (#!) Non esista.

Se il file è denominato mkdep, inserirò l'output di

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

Il comando strace fornisce informazioni sulle chiamate di sistema effettuate, ad esempio strace ls 2>ls.tinserisce quanto segue in ls.t

execve ("/ bin / ls", ["ls"], [/ * 22 vars * /]) = 0
brk (0) = 0x8061000
access ("/ etc / ld.so.nohwcap", F_OK) = -1 ENOENT (nessun file o directory)
mmap2 (NULL, 8192, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0) = 0xb7f82000
access ("/ etc / ld.so.preload", R_OK) = -1 ENOENT (nessun file o directory)
open ("/ 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
chiudi (3) = 0
access ("/ etc / ld.so.nohwcap", F_OK) = -1 ENOENT (nessun file o directory)
open ("/ lib / librt.so.1", O_RDONLY) = 3
leggi (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

(in esecuzione su VM, troppo pigro per digitare tutto) ./mkdep restituisce il file o la cartella non trovata. file mkdep restituisce exe elf a 32 bit e head mkdep restituisce dati binari
Avery3R

1
mkdep sta probabilmente generando questo messaggio perché non riesce a trovare un file di cui ha bisogno ??
Linker3000,

@ linker3000: No, dice Bash: / dirto / mkdep: file o cartella non trovati
Avery3R

@MMavipc: provare strace ./mkdep 2>mkdep.strace.txtquesto dovrebbe darti un'idea di quello che sta succedendo. Potrebbe essere necessario installare strace dai repository.
RedGrittyBrick il

1

Stai cambiando IFS nella tua sceneggiatura? Anch'io ho riscontrato lo stesso problema in uno dei miei script e ho pensato lo stesso (file a 32 bit letto dallo script della shell su una macchina a 64 bit). Ma quello non era il problema nel mio caso. Invece, stavo cambiando IFS in virgola ',' e tornando alla nuova riga che in qualche modo ha confuso il parser e ha causato questo errore.

Ho appena rimosso qualsiasi modifica a IFS e ora funziona perfettamente !!!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.