我只想从命令行./arm-mingw32ce-g++
运行可执行文件,但后来收到错误消息,
bash: ./arm-mingw32ce-g++: No such file or directory
我正在运行Ubuntu Linux 10.10。 ls -l
列出
-rwxr-xr-x 1 root root 433308 2010-10-16 21:32 arm-mingw32ce-g++
使用sudo(sudo ./arm-mingw32ce-g++
)给出
sudo: unable to execute ./arm-mingw32ce-g++: No such file or directory
我不知道为什么操作系统甚至无法看到文件。有什么想法吗?
答案 0 :(得分:63)
此错误可能意味着./arm-mingw32ce-g++
不存在(但确实存在),或者它存在,并且是内核识别但动态加载器不可用的动态链接可执行文件。您可以通过运行ldd /arm-mingw32ce-g++
来查看所需的动态加载程序;标记为not found
的任何内容都是动态加载程序或您需要安装的库。
如果您尝试在amd64安装上运行32位二进制文件:
ia32-libs
。ia32-libs-multiarch
。ia32-libs-multiarch
,或在:i386
个软件包之外选择一组合理的:amd64
个包。答案 1 :(得分:18)
当我尝试在Ubuntu上构建Selenium源时,我遇到了这个错误。即使在我满足所有先决条件之后,具有正确shebang的简单shell脚本也无法运行。
file file-name # helped me in understanding that CRLF ending were present in the file.
我在Vim中打开了文件,我可以看到,因为我曾经在Windows机器上编辑过这个文件,它是DOS格式的。我用以下命令将文件转换为Unix格式:
dos2unix filename # actually helped me and things were fine.
我希望每当我们跨平台编辑文件时都要注意,我们也应该注意文件格式。
答案 2 :(得分:15)
如果尝试运行脚本并且shebang拼写错误,也可能会出现此错误。确保它显示为#!/bin/sh
,#!/bin/bash
或您正在使用的任何翻译。
答案 3 :(得分:7)
我在尝试运行Python脚本时遇到了同样的错误消息 - 这不是@Warpspace的预期用例(请参阅其他评论),但这是我搜索的热门点击之一,所以也许有人会发现它很有用
在我的情况下,这是一个DOS行结尾(\r\n
而不是\n
)shebang行(#!/usr/bin/env python
)会绊倒。一个简单的dos2unix myfile.py
修复了它。
答案 4 :(得分:4)
对于没有32/64位问题的简单bash脚本,我遇到了同样的错误。这可能是因为您尝试运行的脚本中存在错误。这个ubuntu forum post表示使用普通脚本文件可以在前面添加“sh”,你可以从中获得一些调试输出。 e.g。
$ sudo sh arm-mingw32ce-g++
并查看是否有任何输出。
在我的情况下,实际问题是我尝试执行的文件是Windows格式而不是linux格式。
答案 5 :(得分:3)
下面的命令适用于16.4 Ubuntu
当您的.sh文件损坏或未按照unix协议格式化时,会出现此问题。
dos2unix将.sh文件转换为Unix格式!
sudo apt-get install dos2unix -y
dos2unix test.sh
sudo chmod u+x test.sh
sudo ./test.sh
答案 6 :(得分:2)
我收到此错误“No such file or directory”
但它存在是因为我的文件是在Windows中创建的,我试图在Ubuntu上运行它,并且该文件包含无效的15 \ r \ n,其中有新的行。
我刚创建了一个截断不需要的东西的新文件
sleep: invalid time interval ‘15\r’
Try 'sleep --help' for more information.
script.sh: 5: script.sh: /opt/ag/cont: not found
script.sh: 6: script.sh: /opt/ag/cont: not found
root@Ubuntu14:/home/abc12/Desktop# vi script.sh
root@Ubuntu14:/home/abc12/Desktop# od -c script.sh
0000000 # ! / u s r / b i n / e n v b
0000020 a s h \r \n w g e t h t t p : /
0000400 : 4 1 2 0 / \r \n
0000410
root@Ubuntu14:/home/abc12/Desktop# tr -d \\015 < script.sh > script.sh.fixed
root@Ubuntu14:/home/abc12/Desktop# od -c script.sh.fixed
0000000 # ! / u s r / b i n / e n v b
0000020 a s h \n w g e t h t t p : / /
0000400 / \n
0000402
root@Ubuntu14:/home/abc12/Desktop# sh -x script.sh.fixed
答案 7 :(得分:1)
我在Mac上创建的文件遇到了同样的问题。 如果我尝试在带有./filename的shell中运行它,我得到了找不到文件的错误消息。 我认为这个文件有问题。
我做了什么:
打开服务器的ssh会话
猫文件名
将输出复制到剪贴板
rm文件名
触摸文件名
vi文件名
我用于插入模式
粘贴剪贴板中的内容
ESC结束插入模式
:WQ
这对我有用。
答案 8 :(得分:1)
我在mingw32 bash
中遇到了这个问题。我从Program Files (x86)\nodejs
执行了node / npm,然后将它们移到disabled
目录中(基本上将它们从路径中删除)。我在路径中也有Program Files\nodejs
(即64位版本),但仅限于x86版本之后。重新启动bash shell后,可以找到64位版本的npm。 node
始终正常工作(使用移动x86版本时更改的node -v
进行检查)。
我认为bash -r
会起作用而不是重新启动bash:https://unix.stackexchange.com/a/5610
答案 9 :(得分:1)
我找到了适用于Ubuntu 18 here的解决方案。
sudo dpkg --add-architecture i386
然后:
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
答案 10 :(得分:0)
正如其他人所提到的,这是因为找不到加载器,而不是可执行文件。不幸的是,消息不够清晰。
您可以通过更改可执行文件使用的加载器来修复它,请参见我在另一个问题中的详尽解答:Multiple glibc libraries on a single host
基本上,您必须找到它要使用的装载程序:
$ readelf -l arm-mingw32ce-g++ | grep interpreter
[Requesting program interpreter: /lib/ld-linux.so.2]
然后找到等效加载程序的正确路径,并从其实际路径更改可执行文件以使用加载程序:
$ ./patchelf --set-interpreter /path/to/newglibc/ld-linux.so.2 arm-mingw32ce-g++
您可能还需要设置include的路径,在尝试运行它之后,您将知道是否需要它。查看该其他线程中的所有详细信息。
答案 11 :(得分:0)
我遇到了这个问题,原因是在某些编辑器(例如Notepad ++)中停产。您可以在“编辑”菜单/ EOL转换中进行检查。应该选择Unix(LF)。 我希望它会有用。
答案 12 :(得分:0)
在此处添加以供将来参考(适用于可能遇到相同情况的用户): 在Windows上工作时(由于行分隔符与Linux系统不同而引入了额外的字符),并尝试在Linux中运行此脚本(插入了额外的字符)时,会发生此错误。该错误消息具有误导性。
在Windows中,行分隔符为CRLF( \ r \ n ),而在Linux中,行分隔符为LF( \ n )。通常可以在文本编辑器中选择它。
就我而言,这是由于在Windows上工作并上传到Unix服务器上执行而发生的。
答案 13 :(得分:0)
尝试运行terraform / terragrunt(单执行二进制操作)时遇到此错误。
使用which terragrunt
查找可执行文件的位置,在本地目录或具有完整路径的可执行文件中出现奇怪的错误
bash: ./terragrunt: No such file or directory
问题是有两个terragrunt安装,使用brew uninstall terragrunt
删除了一个已修复的问题。
删除该路径后,which terragrunt
显示了新路径/usr/bin/terragrunt
,一切正常。