Bash говорит, что файл не существует, но он есть

11

Я пытаюсь скомпилировать прошивку для моего linksys WRVS4400N.

lsпоказывает, что существует, но когда он пытается запустить его, bash говорит, что его не существует. Я также могу cat, и это исполняемый файл, а не сценарий оболочки.

Avery3R
источник
что вывод ls -la для этого конкретного файла?
user389238
@Ansis -rwxrwxrwx 1 1011 1011 31991 18 мая 2006 г. mkdep
Avery3R
1
покажите нам строку из вашего скрипта и точное сообщение об ошибке. Каков ваш текущий каталог, когда вы пытаетесь вызвать «отсутствующий» файл?
Гленн Джекман
@glenn Это не мой скрипт, который его вызывает, это make-файл cisco, я не могу получить точное сообщение об ошибке, поскольку он работает в vm, но файл или папка bash: / pathto / mkdep не найдены
Avery3R
Так вот где прячутся эти тролли ...
Прорыв

Ответы:

8

Вы упомянули о том , что выход file mkdepесть 32-bit elf. Вы используете 64-битную виртуальную машину.

Пример:

$ 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-битную виртуальную машину и скомпилируйте ее там.

bahamat
источник
1
Если вы устанавливаете ia32-libs, он должен работать потом. Не нужно создавать 32-битную виртуальную машину.
Фил
5

Это установлено для того, чтобы быть исполняемым? Если нет, тогда chmod +x filename. Это в вашем ПУТИ? Если нет, то называйте это ./filenameскорее, чем просто filename.

радостный
источник
Он установлен на исполняемый файл, я сделал ./mkdep, чтобы вызвать его, а также использовать полный путь, без игры в кости.
Avery3R
Вам может понадобиться запустить файл как sudo.
д'Арвит
2

Когда вы пытаетесь выполнить файл, и 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
access ("/ etc / ld.so.nohwcap", F_OK) = -1 ENOENT (нет такого файла или каталога)
mmap2 (NULL, 8192, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0) = 0xb7f82000
access ("/ etc / ld.so.preload", R_OK) = -1 ENOENT (такого файла или каталога нет)
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 (нет такого файла или каталога)
open ("/ lib / librt.so.1", O_RDONLY) = 3
читать (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
источник
(работает на vm, слишком ленив, чтобы все напечатать) ./mkdep возвращает файл или папку, которые не найдены. файл mkdep возвращает 32-разрядный файл elf exe, а head mkdep возвращает двоичные данные
Avery3R
1
Возможно, mkdep генерирует это сообщение, потому что не может найти нужный файл ??
Linker3000
@ linker3000: Нет, там написано: Bash: / dirto / mkdep: файл или папка не найдены
Avery3R
@MMavipc: попробуйте strace ./mkdep 2>mkdep.strace.txtэто дать вам некоторое представление о том, что происходит. Вам может понадобиться установить strace из репозиториев.
RedGrittyBrick
1

Вы меняете IFS в своем сценарии? Я тоже столкнулся с той же проблемой в одном из моих сценариев и думал так же (32-битный файл читается сценарием оболочки на 64-битной машине). Но это не проблема в моем случае. Вместо этого я поменял IFS на запятую ',' и вернулся к новой строке, которая каким-то образом запутала синтаксический анализатор и вызвала эту ошибку.

Я только что удалил все изменения в IFS, и теперь он работает просто отлично !!!

Абхиджит Бучаке
источник