Saya mencoba mengkompilasi firmware untuk Linksys saya, WRVS4400N.
ls
menunjukkan bahwa ada tetapi ketika mencoba menjalankannya bash mengatakan itu tidak ada. Saya juga bisa cat
, dan itu adalah executable, bukan skrip shell.
Saya mencoba mengkompilasi firmware untuk Linksys saya, WRVS4400N.
ls
menunjukkan bahwa ada tetapi ketika mencoba menjalankannya bash mengatakan itu tidak ada. Saya juga bisa cat
, dan itu adalah executable, bukan skrip shell.
Jawaban:
Anda menyebutkan bahwa output dari file mkdep
adalah 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.
Apakah ini diatur agar dapat dieksekusi? Jika tidak, maka chmod +x filename
. Apakah itu di PATH Anda? Jika tidak, maka sebut saja sebagai ./filename
bukan hanya filename
.
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 mkdep
saya 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.t
menempatkan 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
strace ./mkdep 2>mkdep.strace.txt
ini akan memberi Anda gambaran tentang apa yang sedang terjadi. Anda mungkin perlu menginstal strace dari repositori.
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 !!!