linux运行脚本出现错误信息 /bin/bash^M: bad interpreter解决方法

linux运行脚本出现错误信息 /bin/bash^M: bad interpreter解决方法

1. 现象描述

运行构建脚本 ./script/build_project.sh,出现以下错误:

bash 复制代码
aiec@RK3588:~/Desktop/codews/remotedriving-videocapture$./script/build_project.sh 
bash: ./script/build_project.sh: /bin/bash^M: bad interpreter: No such file or directory

2. 原因分析

这是非常经典的 换行符格式问题

  • Windows 格式 (CRLF) :回车符是 \r\n
  • Linux/Unix 格式 (LF) :回车符是 \n

该脚本是在 Windows 环境下编辑(例如 VS Code 默认配置或记事本),然后传输到 Linux 板子上的。Linux 系统将行尾的 \r (显示为 ^M) 当作了文件名的一部分,试图去寻找 /bin/bash\r 这个解释器,导致找不到文件。

3. 解决方法

使用 Linux 自带的 sed 命令一键修复目录下所有脚本的格式。

在终端执行:

bash 复制代码
# 语法:sed -i 's/\r$//' 文件名
sed -i 's/\r$//' ./script/*.sh

执行该命令后,再次运行 ./script/build_project.sh,脚本即可正常启动。

命令详解:

  1. sed (Stream Editor)
    • 这是 Linux 下强大的流编辑器,用于对文本文件进行查找、替换、删除等操作。
  2. -i (in-place)
    • 含义直接修改文件内容
    • 注意 :如果不加 -ised 只会将修改后的结果输出到屏幕(终端),而不会改变原文件。加上 -i 才会真正把文件里的内容改了。
  3. 's/\r$//' (核心脚本部分)
    • 这是 sed 的替换指令,格式为 s/查找的内容/替换成的内容/
    • s:Substitute(替换)。
    • \r :代表 回车符 (Carriage Return) ,也就是报错信息里看到的 ^M。在 Windows 系统中,换行是由 \r\n 组成的,而 Linux 只需要 \n。这个 \r 在 Linux 下就是多余的"垃圾字符"。
    • $ :这是一个正则表达式符号,代表 行尾 (End of line)
      • 组合起来 \r$ 的意思就是:"查找位于每一行末尾的回车符"
    • // :中间是空的,代表 替换为空(即删除)。
  4. ./script/*.sh (目标文件)
    • ./script/:指定目录。
    • *.sh :通配符,表示匹配该目录下所有以 .sh 结尾的脚本文件。

4. 总结

跨平台开发注意换行符 :在 Windows 上使用 VS Code 开发 Linux 代码时,建议将底部状态栏的换行符设置从 CRLF 改为 LF,或配置 Git 的 core.autocrlf 属性。

相关推荐
被摘下的星星3 分钟前
四层模型TCP/IP协议栈
运维·服务器·网络
努力努力再努力wz6 分钟前
【Linux网络系列】深入理解 I/O 多路复用:从 select 痛点到 poll 高并发服务器落地,基于 Poll、智能指针与非阻塞 I/O与线程池手写一个高性能 HTTP 服务器!(附源码)
java·linux·运维·服务器·c语言·c++·python
努力努力再努力wz9 分钟前
【Linux网络系列】万字硬核解析网络层核心:IP协议到IP 分片重组、NAT技术及 RIP/OSPF 动态路由全景
java·linux·运维·服务器·数据结构·c++·python
.千余11 分钟前
【Linux】基本指令2
linux·运维·服务器
2601_9498158415 分钟前
Linux下PostgreSQL-12.0安装部署详细步骤
linux·运维·postgresql
Han_han91917 分钟前
常用API:
java·开发语言
爱写代码的倒霉蛋18 分钟前
天梯赛备赛经验分享(基础版)
经验分享·算法
minji...21 分钟前
Linux 线程同步与互斥(四) POSIX信号量,基于环形队列的生产者消费者模型
linux·运维·服务器·c语言·开发语言·c++
SPC的存折23 分钟前
8、Docker镜像瘦身
运维·docker·容器
东京老树根24 分钟前
SAP学习笔记 - BTP SAP Build05 - SAP BTP BPA简介,Email Destination Settings(TODO)
笔记·学习