Bash says ไฟล์ไม่มีอยู่ แต่มันทำ


11

ฉันพยายามรวบรวมเฟิร์มแวร์สำหรับ linksys WRVS4400N ของฉัน

lsแสดงให้เห็นว่ามีอยู่จริง แต่เมื่อพยายามเรียกใช้มันทุบตีจะบอกว่าไม่มีอยู่ ฉันสามารถทำได้catและเป็นไฟล์ที่เรียกใช้งานได้ไม่ใช่เชลล์สคริปต์


เอาต์พุตของ ls -la สำหรับไฟล์นั้นคืออะไร?
user389238

@Ansis -rwxrwxrwx 1 1011 1011 31991 18 พฤษภาคม 2549 mkdep
Avery3R

1
แสดงบรรทัดจากสคริปต์ของคุณและข้อความแสดงข้อผิดพลาดที่แน่นอน ไดเรกทอรีปัจจุบันของคุณคืออะไรเมื่อคุณพยายามเรียกใช้ไฟล์ "หายไป"
เกล็นแจ็

@glenn ไม่ใช่สคริปต์ของฉันที่เรียกใช้มันเป็น makefile ของซิสโก้ฉันไม่สามารถรับข้อความแสดงข้อผิดพลาดได้เนื่องจากทำงานใน vm แต่ไม่พบไฟล์ bash: / pathto / mkdep หรือโฟลเดอร์
Avery3R

นั่นคือสิ่งที่พวกโทรลล์ซ่อนตัวอยู่ ...
ความก้าวหน้า

คำตอบ:


8

คุณกล่าวว่าการส่งออกของเป็นfile mkdep 32-bit elfคุณกำลังเรียกใช้ VM 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

เพียงสร้าง VM 32 บิตใหม่และรวบรวมไว้ที่นั่น


1
หากคุณติดตั้ง ia32-libs มันควรจะทำงานหลังจากนั้น ไม่จำเป็นต้องสร้าง VM แบบ 32 บิต
Phil

5

มันถูกตั้งค่าให้สามารถเรียกใช้งานได้หรือไม่? chmod +x filenameถ้าไม่เช่นนั้น อยู่ในเส้นทางของคุณหรือไม่ ถ้าไม่เช่นนั้นเรียกว่าเป็นมากกว่าแค่./filenamefilename


มัน 'ตั้งเป็นปฏิบัติการฉันได้ทำ. /mkdep เพื่อเรียกมันเช่นเดียวกับการใช้เส้นทางแบบเต็มไม่มีลูกเต๋า
Avery3R

คุณอาจต้องเรียกใช้ไฟล์เป็น sudo
D'Arvit

2

เมื่อคุณพยายามเรียกใช้ไฟล์และทุบตีบอกว่าไม่มีอยู่บางครั้งหมายความว่า 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
ปิด (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 \ 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

(ทำงานบน vm ขี้เกียจเกินกว่าจะพิมพ์ทุกอย่างออกไป) ./mkdep จะส่งคืนไฟล์หรือโฟลเดอร์ที่ไม่พบ แฟ้มผลตอบแทน mkdep 32 บิตเอลฟ์ exe และหัว mkdep ผลตอบแทนข้อมูลไบนารี
Avery3R

1
mkdep อาจสร้างข้อความนี้เพราะหาไฟล์ไม่เจอ
Linker3000

@ linker3000: ไม่มันบอกว่า Bash: / dirto / mkdep: ไม่พบไฟล์หรือโฟลเดอร์
Avery3R

@ MMavipc: ลองทำstrace ./mkdep 2>mkdep.strace.txtเช่นนี้จะทำให้คุณมีความคิดในสิ่งที่เกิดขึ้น คุณอาจต้องติดตั้ง strace จากที่เก็บ
RedGrittyBrick

1

คุณเปลี่ยน IFS ในสคริปต์ของคุณหรือไม่ ฉันก็พบปัญหาเดียวกันในหนึ่งในสคริปต์ของฉันและคิดเหมือนกัน (ไฟล์ 32 บิตถูกอ่านโดยเชลล์สคริปต์บนเครื่อง 64 บิต) แต่นั่นไม่ใช่ปัญหาในกรณีของฉัน แต่ฉันเปลี่ยน IFS เป็นจุลภาค ',' และกลับสู่บรรทัดใหม่ซึ่งทำให้ parser สับสนและทำให้เกิดข้อผิดพลาดนี้

ฉันเพิ่งลบการเปลี่ยนแปลงใด ๆ ใน IFS และใช้งานได้ดีในขณะนี้ !!!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.