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

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

Estou tentando compilar o firmware para meu linksys WRVS4400N.

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

Responder1

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á.

Responder2

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

Responder3

Quando você tenta executar um arquivo e o bash diz que ele não existe, às 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 forem nomeados, mkdepeu postaria 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.tcoloca o seguinte em ls.t

execve("/bin/ls", ["ls"], [/* 22 variáveis ​​*/]) = 0
intervalo(0) = 0x8061000
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (Esse arquivo ou diretório não existe)
mmap2(NULO, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f82000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (Esse arquivo ou diretório não existe)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=32311, ...}) = 0
mmap2(NULO, 32311, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f7a000
fechar(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (Esse arquivo ou diretório não existe)
open("/lib/librt.so.1", O_RDONLY) = 3
leia(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

Responder4

Você está alterando o IFS no 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 em uma máquina de 64 bits). Mas esse não foi o problema no meu caso. Em vez disso, eu estava mudando IFS para vírgula ',' e de volta para a nova linha, o que de alguma forma confundiu o analisador e causou esse erro.

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

informação relacionada