-bin/sh ./hello not found错误

1、我现在挂上文件系统了。
编了个helloworld小程序想测试一下:
hello.c,很简单一句话:printf("hello world/n");
但是当我用armgcc编译好,放到文件系统上时,执行 ./hello,提示:
-bin/sh ./hello not found

这是什么原因?
我在内核配置里面已经选上 ELF格式支持,但是a.out 和MISC binaries没有选。现在晚上手上没板也试不了。
大侠们觉得是哪里的问题呢?
会是busybox问题么?但是我拿到3星的s3c2440下试确实没有问题的,猜测应该是内核问题?

后来想到编译的时候没有加静态选项,可能是缺少库文件。

马上加上库文件,果然好了。

拿lijay大虾的话总结:

一就是有可能/lib下面没有C库 就是没有glibc或者uclibc的动态库
二就是你板子上的C库和编译hello链接时用的C库不一样, 差别太大.

2、

最近有时间开始学习ARM,平台是TQ2440,下载了2.6.31的内核源码,并开始构建yaffs2文件系统,手册上写的还是很详细,可是我在 往里面加Zmodem文件传输协议的命时,却出现了-/bin/sh: rz: not found的错误,自己编译的hello程序也出现同样的错误,不是权限不够,后来把系统自带的根文件系统下的库文件全复制过来,这样就可以执行了。

 

看来是缺少库文件的原因,可是原来的库文件太多,每次下载很慢,所以就干脆自己添加目前需要的,用arm-linux-readelf命令查看的所需的库,根据输出拷贝了    

 libc-2.8.so    libgcc_s.so.1  libnsl.so.1
 libc.so.6      libnsl-2.8.so

以为这样就没问题了,可是还是出现上述错误

后来用arm-linux-readelf -a hello

输出一大堆信息,看见输出中提到了ld-linux.so.3,去库文件的目录下面查看了该文件,是个符号链接,于是把它和它指向的库文件全都复制到根文件系统的/lib目录下面,这样就可以制作的yaffs2文件系统下载到板子上

运行./hello

hello

 

不知道ld-linux.so.3在Linux系统中起什么样的作用。。。

 

3、

奋战半月有余,终于建起了开发平台,以第一个“Hello World”入门程序开始,兴奋之余却遇到bin/sh: hello :not found拦路虎,郁闷啊~~~网上说法云云,改了kernel,又改rootfs,瞎忙一通无济啊,不过还是被我的鼠眼瞄到了,嘿嘿~~~

Build Options->

Build BusyBox as a static binary (no shared libs)

Build with Large File Support (for accessing file>2GB)

如果选择 Build BusyBox as a static binary (no shared libs) 方式进行编译时,所需的库已经与程序静态地链接在一起,这些程序不需要额外的库就可以单独运行,但是自己编写的程序在文件系统上运行必须采用静态编译,否 则会报诸如:bin/sh: hello :not found的错误。

静态编译如:

arm-linux-gcc –static hello.c –o hello

在开发板上直接./hello,便会有你要的惊喜~~~

<think>好的,我现在需要帮用户解决一个关于Shell脚本执行时报错的问题。用户提供的错误信息是“-bash: ./test3.sh: cannot execute: required file not found”。首先,我得分析这个错误可能的原因。 首先,用户提到的是在运行脚本时报错,无法执行,提示文件未找到。根据经验,这类错误通常有几个常见原因。首先想到的是文件权限问题,可能用户没有给脚本添加执行权限。不过错误信息里说的是“required file not found”,可能不仅仅是权限问题,可能还涉及到文件路径是否正确,或者脚本的解释器路径是否正确。 接下来,我需要考虑其他可能性。比如,脚本的shebang(即第一行的#!/bin/bash)是否正确,如果解释器路径写错了,比如写成了不存在的路径,系统也会报找不到文件。这时候即使文件存在且有权权限,也会出现这个错误。此外,还有一种可能是脚本文件本身不存在,或者用户执行的时候路径写错了,比如当前目录下没有test3.sh文件,或者文件名拼写错误。 另外,还要考虑文件系统的问题,比如脚本所在的磁盘是否被正确挂载,或者是否有符号链接损坏导致文件无法访问。不过这种情况相对少见,可能优先检查更常见的问题。 用户之前提到的错误是关于条件语句中的语法问题,现在又遇到了执行问题,可能需要分步骤解决。首先确认脚本是否存在,用户是否正确输入了路径。然后检查权限问题,使用chmod +x添加执行权限。接着检查shebang是否正确,比如是否使用了/bin/bash或者其他正确的解释器路径。 同时,用户可能是在Windows环境下编写脚本,然后复制到Linux系统执行,导致换行符的问题。这种情况下,虽然文件存在,但由于换行符是CRLF而不是LF,可能会导致解释器无法识别,从而报错。这时候需要转换换行符,使用dos2unix工具或者sed命令处理。 此外,还要考虑文件系统的挂载问题,比如脚本是否位于一个被正确挂载的可执行文件系统中。例如,某些情况下,如果磁盘挂载为noexec选项,那么即使文件有执行权限,也无法运行,但此时错误信息可能会不同,通常会提示权限被拒绝,而不是文件未找到,所以这可能不是主要原因。 总结可能的原因: 1. 脚本文件不存在或路径错误。 2. 缺少执行权限。 3. shebang路径错误。 4. 换行符问题(CRLF导致的问题)。 5. 文件系统或权限问题(如挂载选项)。 接下来,我需要将这些可能性按照优先级排列,并给出用户逐步检查的建议。通常,先检查文件是否存在,再检查权限,然后是shebang和换行符问题。同时,用户可能需要具体的命令示例来验证和解决问题,比如ls检查文件是否存在,chmod添加权限,检查shebang行,使用file命令查看文件类型等。 另外,用户可能对Shell脚本的执行机制不太熟悉,需要简明扼要地解释每个步骤的原因,比如为什么需要执行权限,shebang的作用是什么,换行符如何影响脚本执行等。这样用户不仅解决了当前问题,还能预防未来出现类似的情况。 最后,确保回答的结构清晰,分点列出可能的原因和解决方法,并给出示例命令,方便用户操作。同时,提醒用户注意常见的陷阱,比如在Windows编辑脚本导致的问题,或者路径拼写错误等。</think>你遇到的错误 `-bash: ./test3.sh: cannot execute: required file not found` 通常由以下原因导致: --- ### **错误原因分析** #### 1. **脚本文件不存在或路径错误** - 当执行 `./test3.sh` 时,系统会在当前目录寻找 `test3.sh`。 - 如果文件不存在、文件名拼写错误,或不在当前目录中,会触发此错误。 #### 2. **文件权限不足** - 即使文件存在,若没有可执行权限(`x`),系统也会报错。 - 默认新建的脚本文件权限是 `-rw-r--r--`(没有执行权限)。 #### 3. **脚本的 `Shebang` 行问题** - `Shebang`(首行 `#!/bin/bash`)指定了解释器路径。 - 如果路径错误(如 `#!/bin/bashh` 拼写错误),系统会认为“找不到解释器文件”。 #### 4. **跨平台换行符问题** - 在 Windows 中编写的脚本换行符是 `CRLF`(`\r\n`),而 Linux 要求 `LF`(`\n`)。 - 文件实际存在,但格式不兼容会导致系统误判为“无效文件”。 --- ### **解决方法** #### **第一步:检查文件是否存在** 确认脚本路径和文件名正确: ```bash ls -l ./test3.sh # 查看文件是否存在及权限 ``` #### **第二步:添加可执行权限** 赋予脚本执行权限: ```bash chmod +x ./test3.sh ``` #### **第三步:检查 `Shebang` 行** 打开脚本文件,确保首行有效(如 `#!/bin/bash`): ```bash #!/bin/bash # 正确的 Shebang echo "Hello World" ``` #### **第四步:修复换行符(Windows/Linux 兼容问题)** 若脚本在 Windows 中编辑过,需转换换行符: ```bash # 方法 1:使用 dos2unix 工具 dos2unix ./test3.sh # 方法 2:用 sed 删除 CR 字符 sed -i 's/\r$//' ./test3.sh ``` #### **第五步:检查文件系统挂载问题(罕见情况)** 如果脚本位于外置磁盘或网络存储,确保挂载时未使用 `noexec` 选项: ```bash mount | grep "挂载路径" # 查看挂载参数 ``` --- ### **验证脚本是否可执行** ```bash # 查看文件类型和权限 file ./test3.sh # 应显示 "Bourne-Again shell script" ls -l ./test3.sh # 权限需包含 x(如 -rwxr-xr-x) # 直接通过解释器运行(绕过权限问题) bash ./test3.sh # 若成功,说明脚本内容无语法错误 ``` --- ### **常见错误场景** 1. **文件名拼写错误** - 脚本名为 `test3.sh`,但输入了 `./test3.shh`。 2. **未保存文件** - 在编辑器中修改脚本后忘记保存,导致文件内容未更新。 3. **文件路径错误** - 当前目录不包含 `test3.sh`,却尝试执行 `./test3.sh`。 --- ### **总结** - 优先检查文件是否存在、权限是否正确、`Shebang` 是否有效。 - 若脚本在 Windows 中编辑过,务必转换换行符。 - 通过 `bash ./test3.sh` 直接运行可快速验证脚本内容是否正常。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值