Error处理:/bin/bash^M: 坏的解释器: 没有该文件或目录(bad interpreter: No such file or directory)
在Linux下编译运行脚本的时候出现”/bin/bash^M: 坏的解释器: 没有那个文件或目录(bad interpreter: No such file or directory)“这样的错误。
解决方法:
使用在终端输入sed -i 's/\r$//' check_tool.sh即可
其中check_tool.sh为文件名,这里改成自己需要的即可
原因:
这个文件在Windows 下编辑过,在Windows下每一行结尾是\n\r,而Linux下则是\n
sed -i 's/\r$//' check_tool.sh 会把check_tool.sh中的行尾的\r替换为空白
详细解析:
这跟系统有关。脚本文件在windows下编辑过,windows下每一行的结尾是\n\r,而在linux下文件的结尾是\n,那么你在windows下编辑过的文件在linux下打开看的时候每一行的结尾就会多出来一个字符\r,
用cat-A filename时你可以看到这个\r字符被显示为^M
- #!/bin/bash^M$
- ^M$
- #Program:^M$
- ^M$
- # ip scanner ^M$
- ^M$
- #Author:^M$
- ^M$
- # wangzhe^M$
- ^M$
- #Time:^M$
- ^M$
- # 2012-9-1^M$
- ^M$
- #eaxmple:sh scanner.sh 192.168.1.101^M$
- ^M$
- ^M$
- ^M$
- network=$(echo $1 | cut -d. -f1-3)^M$
- ^M$
- ^M$
- ^M$
- for i in $(seq 1 254)^M$
- ^M$
- do^M$
- ^M$
- ping -c 1 -w 1 $network.$i > /dev/null ^M$
- ^M$
- if [ $? -eq 0 ]; then ^M$
- ^M$
- arp $network.$i | grep ":" | awk '{print $1,$3}' ^M$
- ^M$
- echo "host $network.$i is up"^M$
- ^M$
- else ^M$
- ^M$
- echo "host $network.$i is down"^M$
- ^M$
- fi^M$
- ^M$
- done^M$
PS:cat -A 什么意思?
A就是all的意思,就是所有的都显示出现,也就是说\n\r默认是不显示的。
这时候只需要删除这个字符就可以了。
怎么删掉呢?
正则表达式sed-i 's/\r$//'filename
说明:
- -i插入
- s替代模式
- \r$表示任何以\r结束的字符
- 整句意思是把以\r结束的字符换成空白
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~