Bash mengatakan file tidak ada, tetapi file itu ada

11

Saya mencoba mengkompilasi firmware untuk Linksys saya, WRVS4400N.

lsmenunjukkan bahwa ada tetapi ketika mencoba menjalankannya bash mengatakan itu tidak ada. Saya juga bisa cat, dan itu adalah executable, bukan skrip shell.

Avery3R
sumber
apa output dari ls -la untuk file tertentu?
user389238
@Ansis -rwxrwxrwx 1 1011 1011 31991 18 Mei 2006 mkdep
Avery3R
1
perlihatkan baris dari skrip Anda kepada kami, dan pesan kesalahan yang sebenarnya. Apa direktori Anda saat ini ketika Anda mencoba memohon file "hilang"?
glenn jackman
@glenn Ini bukan skrip saya yang menjalankannya, ini cfile makefile, saya tidak bisa mendapatkan pesan kesalahan yang tepat karena itu berjalan di vm, tapi, bash: / pathto / mkdep file atau folder tidak ditemukan
Avery3R
Jadi di situlah tempat para troll bersembunyi ...
Terobosan

Jawaban:

8

Anda menyebutkan bahwa output dari file mkdepadalah 32-bit elf. Anda menjalankan VM 64-bit.

Contoh:

$ 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

Buat saja 32-bit VM baru dan kompilasi di sana.

bahamat
sumber
1
Jika Anda menginstal ia32-libs, itu akan berfungsi setelahnya. Tidak perlu membuat VM 32bit.
Phil
5

Apakah ini diatur agar dapat dieksekusi? Jika tidak, maka chmod +x filename. Apakah itu di PATH Anda? Jika tidak, maka sebut saja sebagai ./filenamebukan hanya filename.

luar biasa
sumber
Ini diatur ke executable, saya sudah melakukan ./mkdep untuk memanggilnya serta menggunakan path lengkap, tidak ada dadu.
Avery3R
Anda mungkin perlu menjalankan file sebagai sudo.
D'Arvit
2

Ketika Anda mencoba untuk mengeksekusi file dan bash mengatakan itu tidak ada, kadang-kadang berarti bash percaya file tersebut adalah skrip dan bahwa penerjemah yang ditentukan pada baris pertama (#!) Tidak ada.

Jika file bernama mkdepsaya akan memposting output

./mkdep
file mkdep
hd mkdep | head
strace ./mkdep 2>mkdep.strace.txt

Perintah strace memberikan info tentang panggilan sistem yang dibuat, misalnya strace ls 2>ls.tmenempatkan yang berikut ke ls.t

mengeksekusi ("/ bin / ls", ["ls"], [/ * 22 vars * /]) = 0
brk (0) = 0x8061000
akses ("/ etc / ld.so.nohwcap", F_OK) = -1 ENOENT (Tidak ada file atau direktori seperti itu)
mmap2 (NULL, 8192, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0) = 0xb7f82000
akses ("/ etc / ld.so.preload", R_OK) = -1 ENOENT (Tidak ada file atau direktori seperti itu)
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
tutup (3) = 0
akses ("/ etc / ld.so.nohwcap", F_OK) = -1 ENOENT (Tidak ada file atau direktori seperti itu)
open ("/ lib / librt.so.1", O_RDONLY) = 3
baca (3, "\ 177ELF \ 1 \ 1 \ 1 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 3 \ 0 \ 3 \ 0 \ 1 \ 0 \ 0 \ 0 \ 0 \ 240 \ 30 \ 0 \ 0004 \ 0 \ 0 \ 0 "..., 512) = 512
fstat64 (3, {st_mode = S_IFREG | 0644, st_size = 30624, ...}) = 0
RedGrittyBrick
sumber
(berjalan pada vm, terlalu malas untuk mengetik semuanya) ./mkdep mengembalikan file atau folder yang tidak ditemukan. file mkdep mengembalikan exe elf 32-bit, dan head mkdep mengembalikan data biner
Avery3R
1
mkdep mungkin membuat pesan ini karena tidak dapat menemukan file yang dibutuhkan ??
Linker3000
@ linker3000: Tidak, katanya Bash: / dirto / mkdep: file atau folder tidak ditemukan
Avery3R
@ MMavipc: coba strace ./mkdep 2>mkdep.strace.txtini akan memberi Anda gambaran tentang apa yang sedang terjadi. Anda mungkin perlu menginstal strace dari repositori.
RedGrittyBrick
1

Apakah Anda mengubah IFS di skrip Anda? Saya juga mengalami masalah yang sama di salah satu skrip saya dan berpikir yang sama (file 32 bit sedang dibaca oleh skrip shell pada mesin 64 bit). Tapi itu bukan masalah dalam kasus saya. Sebaliknya, saya mengubah IFS ke koma ',' dan kembali ke baris baru yang entah bagaimana membingungkan parser dan menyebabkan kesalahan ini.

Saya baru saja menghapus perubahan apa pun di IFS dan berfungsi dengan baik sekarang !!!

Abhijit Buchake
sumber