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 shell script.
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 shell script.
Respostas:
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á.
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 ./filename
ao invés de apenas filename
.
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, mkdep
eu 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.t
coloca 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
strace ./mkdep 2>mkdep.strace.txt
isso deve lhe dar uma idéia do que está acontecendo. Pode ser necessário instalar o strace a partir de repositórios.
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 !!!