Sto cercando di compilare il firmware per il mio linksys WRVS4400N.
ls
mostra che esiste ma quando tenta di eseguirlo bash dice che non esiste. Posso anche cat
farlo, ed è un eseguibile, non uno script di shell.
Sto cercando di compilare il firmware per il mio linksys WRVS4400N.
ls
mostra che esiste ma quando tenta di eseguirlo bash dice che non esiste. Posso anche cat
farlo, ed è un eseguibile, non uno script di shell.
Risposte:
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ì.
È impostato per essere eseguibile? Altrimenti, allora chmod +x filename
. È nel tuo PERCORSO? In caso contrario, chiamalo come ./filename
non solo filename
.
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.t
inserisce 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
strace ./mkdep 2>mkdep.strace.txt
questo dovrebbe darti un'idea di quello che sta succedendo. Potrebbe essere necessario installare strace dai repository.
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 !!!