Bash说文件不存在,但它确实存在


11

我正在尝试为我的linksys WRVS4400N编译固件。

ls显示存在,但当它试图运行它时,bash表示它不存在。我也cat可以,它是一个可执行文件,而不是一个shell脚本。


那个特定文件的ls -la输出是什么?
Hans Solo

@Ansis -rwxrwxrwx 1 1011 1011 31991 2006年5月18日mkdep
Avery3R 2011年

1
向我们展示脚本中的行以及确切的错误消息。当您尝试调用“丢失”文件时,您当前的目录是什么?
格伦杰克曼2011年

@glenn这不是我的脚本调用它,它是cisco的makefile,我无法得到确切的错误消息,因为它在vm中运行,但是,bash:/ pathto / mkdep文件或文件夹未找到
Avery3R 2011年

那就是那些巨魔隐藏的地方......
突破

Answers:


7

你提到输出file mkdep32-bit elf。您正在运行64位VM。

例:

$ 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位VM并在那里编译它。


1
如果您安装ia32-libs,它应该在以后工作。无需创建32位VM。
Phil

5

它被设置为可执行吗?如果没有,那么chmod +x filename。它在你的PATH中吗?如果没有,那就把它叫做./filename而不仅仅是filename


它设置为可执行文件,我已完成./mkdep调用它以及使用完整路径,没有骰子。
Avery3R 2011年

您可能需要以sudo身份运行该文件。
D'Arvit 2011年

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

(在vm上运行,懒得输出所有内容)./ mkdep返回未找到的文件或文件夹。文件mkdep返回32位精灵exe,并且头部mkdep返回二进制数据
Avery3R 2011年

1
mkdep可能会生成此消息,因为它找不到它需要的文件?
Linker3000 2011年

@ linker3000:不,它说Bash:/ dirto / mkdep:文件或文件夹未找到
Avery3R 2011年

@MMavipc:尝试strace ./mkdep 2>mkdep.strace.txt这个应该让你知道发生了什么。您可能需要从存储库安装strace。
RedGrittyBrick 2011年

1

你在脚本中改变IFS吗?我也在我的一个脚本中遇到了同样的问题,并且认为相同(在64位机器上由shell脚本读取32位文件)。但在我的情况下,这不是问题。相反,我正在将IFS更改为逗号','并返回到新行,该行以某种方式混淆了解析器并导致此错误。

我刚刚删除了IFS的任何变化,它现在工作得很好!!!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.