Bash nói rằng tập tin không tồn tại, nhưng nó


11

Tôi đang cố gắng biên dịch phần sụn cho linksys WRVS4400N của tôi.

lscho thấy tồn tại nhưng khi nó cố chạy, bash nói rằng nó không tồn tại. Tôi cũng có thể cat, và nó là một tập lệnh thực thi, không phải là một kịch bản shell.


đầu ra của ls -la cho tập tin cụ thể đó là gì?
dùng389238

@Ansis -rwxrwxrwx 1 1011 1011 31991 ngày 18 tháng 5 năm 2006 mkdep
Avery3R

1
hiển thị cho chúng tôi dòng từ tập lệnh của bạn và thông báo lỗi chính xác. Thư mục hiện tại của bạn là gì khi bạn cố gắng gọi tập tin "mất tích"?
glenn jackman

@glenn Đó không phải là kịch bản của tôi đó là cách gọi nó, makefile nó cisco, tôi không thể nhận được thông báo lỗi chính xác vì nó đang chạy trong một vm, nhưng, bash: / pathto / mkdep tập tin hoặc thư mục không tìm thấy
Avery3R

Vì vậy, đó là nơi những kẻ troll đó đang ẩn nấp ...
Đột phá

Câu trả lời:


8

Bạn đã đề cập rằng đầu ra file mkdep32-bit elf. Bạn đang chạy máy ảo 64 bit.

Thí dụ:

$ 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

Chỉ cần tạo một máy ảo 32 bit mới và biên dịch nó ở đó.


1
Nếu bạn cài đặt ia32-libs, nó sẽ hoạt động sau đó. Không cần tạo VM 32 bit.
Phil

5

Nó được thiết lập để được thực thi? Nếu không, thì chmod +x filename. Có phải trong PATH của bạn? Nếu không, sau đó gọi nó là ./filenamehơn là chỉ filename.


Nó được thiết lập để thực thi, tôi đã thực hiện ./mkdep để gọi nó cũng như sử dụng đường dẫn đầy đủ, không có xúc xắc.
Avery3R

Bạn có thể cần phải chạy tệp như sudo.
D'Arvit

2

Khi bạn cố gắng thực thi một tệp và bash nói rằng nó không tồn tại, đôi khi điều đó có nghĩa là bash tin rằng tệp đó là một tập lệnh và trình thông dịch được chỉ định trong dòng đầu tiên (#!) Không tồn tại.

Nếu các tập tin được đặt tên mkdeptôi sẽ gửi đầu ra của

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

Lệnh strace cung cấp thông tin về các cuộc gọi hệ thống được thực hiện, ví dụ như strace ls 2>ls.tđặt các mục sau vào ls.t

thực hiện ("/ bin / ls", ["ls"], [/ * 22 vars * /]) = 0
brk (0) = 0x8061000
truy cập ("/ etc / ld.so.nohwcap", F_OK) = -1 ENOENT (Không có tệp hoặc thư mục như vậy)
mmap2 (NULL, 8192, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0) = 0xb7f82000
truy cập ("/ etc / ld.so.preload", R_OK) = -1 ENOENT (Không có tệp hoặc thư mục như vậy)
mở ("/ 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
đóng (3) = 0
truy cập ("/ etc / ld.so.nohwcap", F_OK) = -1 ENOENT (Không có tệp hoặc thư mục như vậy)
mở ("/ lib / librt.so.1", O_RDONLY) = 3
đọc (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

(chạy trên vm, quá lười để gõ mọi thứ) ./mkdep trả về tệp hoặc thư mục không tìm thấy. tập tin mkdep trả về exe 32 bit và phần đầu mkdep trả về dữ liệu nhị phân
Avery3R

1
mkdep có thể tạo thông báo này vì không thể tìm thấy tệp mà nó cần ??
Linker3000

@ linker3000: Không, nó nói Bash: / dirto / mkdep: không tìm thấy tệp hoặc thư mục
Avery3R

@MMavipc: hãy thử strace ./mkdep 2>mkdep.strace.txtđiều này sẽ cho bạn một số ý tưởng về những gì đang xảy ra. Bạn có thể cần phải cài đặt strace từ kho.
RedGrittyBrick

1

Bạn đang thay đổi IFS trong kịch bản của bạn? Tôi cũng gặp phải vấn đề tương tự trong một trong các tập lệnh của mình và cũng nghĩ như vậy (tệp 32 bit được đọc bởi tập lệnh shell trên máy 64 bit). Nhưng đó không phải là vấn đề trong trường hợp của tôi. Thay vào đó, tôi đã thay đổi IFS thành dấu phẩy ',' và quay lại dòng mới khiến phần nào đó nhầm lẫn trình phân tích cú pháp và gây ra lỗi này.

Tôi vừa xóa bất kỳ thay đổi nào trong IFS và nó hoạt động tốt ngay bây giờ !!!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.