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

11

Estou tentando compilar o firmware para o meu Linksys WRVS4400N.

lsmostra 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 shell script.

Avery3R
fonte
qual é a saída de ls -la para esse arquivo específico?
user389238
@Ansis -rwxrwxrwx 1 1011 1011 31991 18 de maio de 2006 mkdep
Avery3R
1
mostre-nos a linha do seu script e a mensagem de erro exata. Qual é o seu diretório atual quando você tenta chamar o arquivo "ausente"?
Glenn Jackman
@glenn Não é o meu script que está invocando que, makefile-lo de de cisco, eu não posso receber a mensagem de erro exata, uma vez que está sendo executado em uma máquina virtual, mas, bash: / pathto / arquivo mkdep ou pasta não encontrado
Avery3R
Então é aí que esses trolls estão escondendo ...
Breakthrough

Respostas:

8

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

bahamat
fonte
1
Se você instalar o ia32-libs, ele deverá funcionar posteriormente. Não há necessidade de criar uma VM de 32 bits.
19413 Phil
5

Está definido para ser executável? Se não, então chmod +x filename. Está no seu CAMINHO? Se não, então chame-o como ./filenameao invés de apenas filename.

frabjous
fonte
Está definido como executável, eu já fiz ./mkdep para chamá-lo, assim como o caminho completo, sem dados.
Avery3R
Pode ser necessário executar o arquivo como sudo.
D'Arvit 18/08/11
2

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 intérprete especificado na primeira linha (#!) Não existe.

Se os arquivos forem nomeados, mkdepeu publicaria 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 vars * /]) = 0
brk (0) = 0x8061000
acesso ("/ etc / ld.so.nohwcap", F_OK) = -1 ENOENT (Nenhum arquivo ou diretório desse tipo)
mmap2 (NULL, 8192, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0) = 0xb7f82000
acesso ("/ etc / ld.so.preload", R_OK) = -1 ENOENT (Nenhum arquivo ou diretório desse tipo)
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
fechar (3) = 0
acesso ("/ etc / ld.so.nohwcap", F_OK) = -1 ENOENT (Nenhum arquivo ou diretório desse tipo)
open ("/ lib / librt.so.1", O_RDONLY) = 3
ler (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
fonte
(rodando na vm, com preguiça de digitar tudo) ./mkdep retorna arquivo ou pasta não encontrada. arquivo mkdep retorna elf de 32 bits exe e head mkdep retorna dados binários
Avery3R
1
mkdep possivelmente está gerando essa mensagem porque não consegue encontrar um arquivo necessário?
precisa saber é o seguinte
@ linker3000: Não, ele diz Bash: / dirto / mkdep: arquivo ou pasta não encontrado
Avery3R
@ MMavipc: tente strace ./mkdep 2>mkdep.strace.txtisso deve lhe dar uma idéia do que está acontecendo. Pode ser necessário instalar o strace a partir de repositórios.
RedGrittyBrick
1

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

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

Abhijit Buchake
fonte