Bash diz que arquivo não existe, mas não

11

Estou tentando compilar o firmware para o meu linksys WRVS4400N.

ls mostra que existe, mas quando tenta executá-lo, o bash diz que não existe. Eu também posso cat , e é um executável, não um script de shell.

    
por Avery3R 18.08.2011 / 23:15

4 respostas

7

Você mencionou que a saída de file mkdep é 32-bit elf . Você está executando uma VM de 64 bits.

Exemplo:

$ 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 criar uma nova VM de 32 bits e compilá-la lá.

    
por 19.08.2011 / 01:58
5

Está definido para ser executável? Se não, então chmod +x filename . Está no seu PATH? Caso contrário, chame-o como ./filename em vez de apenas filename .

    
por 18.08.2011 / 23:18
2

Quando você tenta executar um arquivo e o bash diz que ele não existe, algumas vezes significa que o bash acredita que o arquivo é um script e que o interpretador especificado na primeira linha (#!) não existe.

Se os arquivos tiverem o nome mkdep , postarei a saída de

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

O comando strace fornece informações sobre as chamadas do sistema feitas, por exemplo strace ls 2>ls.t coloca o seguinte em ls.t

execve("/bin/ls", ["ls"], [/* 22 vars */]) = 0
brk(0)                                  = 0x8061000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f82000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or 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
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/librt.so.1", O_RDONLY)       = 3
read(3, "7ELF
./mkdep
file mkdep
hd mkdep | head
strace ./mkdep 2>mkdep.strace.txt
execve("/bin/ls", ["ls"], [/* 22 vars */]) = 0
brk(0)                                  = 0x8061000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f82000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or 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
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/librt.so.1", O_RDONLY)       = 3
read(3, "7ELF%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%0%pre%%pre%04%pre%%pre%%pre%"..., 512) =512
fstat64(3, {st_mode=S_IFREG|0644, st_size=30624, ...}) = 0
%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%0%pre%%pre%04%pre%%pre%%pre%"..., 512) =512 fstat64(3, {st_mode=S_IFREG|0644, st_size=30624, ...}) = 0
    
por 18.08.2011 / 23:39
1

Você está mudando o IFS em seu script? Eu também encontrei o mesmo problema em um dos meus scripts e pensei o mesmo (arquivo de 32 bits sendo lido pelo shell script na máquina de 64 bits). Mas esse não foi o problema no meu caso. Em vez disso, eu estava mudando o IFS para vírgula ',' e de volta para a nova linha que de alguma forma confundiu o analisador e causou esse erro.

Acabei de remover qualquer alteração no IFS e funciona bem agora !!!

    
por 24.10.2013 / 10:29