Я намагаюся зібрати прошивку для моєї linkys WRVS4400N.
ls
показує, що існує, але коли він намагається запустити його, скаже, що його не існує. Я також можу cat
це, і це виконуваний, а не сценарій оболонки.
Я намагаюся зібрати прошивку для моєї linkys WRVS4400N.
ls
показує, що існує, але коли він намагається запустити його, скаже, що його не існує. Я також можу cat
це, і це виконуваний, а не сценарій оболонки.
Відповіді:
Ви згадали, що результат file mkdep
є 32-bit elf
. Ви працюєте з 64-розрядним VM.
Приклад:
$ 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
Просто створіть новий 32-розрядний VM і компілюйте його там.
Чи встановлено це для виконання? Якщо ні, то chmod +x filename
. Це у вашій ПАТІ? Якщо ні, то називайте це ./filename
швидше, ніж просто filename
.
Коли ви намагаєтеся виконати файл і bash каже, що його не існує, іноді це означає, що bash вважає, що файл є сценарієм, і що інтерпретатор, зазначений у першому рядку (#!), Не існує.
Якщо файли названі, mkdep
я б опублікував вихід
./mkdep
file mkdep
hd mkdep | head
strace ./mkdep 2>mkdep.strace.txt
Команда strace дає інформацію про зроблені системні виклики, наприклад, strace ls 2>ls.t
ставить наступне в ls.t
execve ("/ bin / ls", ["ls"], [/ * 22 vars * /]) = 0 brk (0) = 0x8061000 доступ ("/ etc / ld.so.nohwcap", F_OK) = -1 ENOENT (немає такого файлу чи каталогу) mmap2 (NULL, 8192, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0) = 0xb7f82000 доступ ("/ etc / ld.so.preload", R_OK) = -1 ENOENT (немає такого файлу чи каталогу) відкрити ("/ 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 закрити (3) = 0 доступ ("/ etc / ld.so.nohwcap", F_OK) = -1 ENOENT (немає такого файлу чи каталогу) відкрити ("/ lib / librt.so.1", O_RDONLY) = 3 прочитати (3, "\ 177ELF \ 1 \ 1 \ 1 \ 0 \ 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
це має дати вам деяке уявлення про те, що відбувається. Можливо, вам доведеться встановити страйк із сховищ.
Ви змінюєте IFS у своєму сценарії? Я теж зіткнувся з тією ж проблемою в одному зі своїх сценаріїв і подумав те саме (32-бітний файл читається скриптом оболонки на 64-бітній машині). Але це було не в моєму випадку. Натомість я змінив IFS на кома "," і повернувся до нового рядка, який якимось чином переплутав аналізатор і спричинив цю помилку.
Я просто видалив будь-які зміни в IFS, і це працює просто чудово зараз !!!