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 属性。

相关推荐
不一样的少年_4 分钟前
Docker 入门第一课:从架构、云服务器到安装完成
linux·docker·云计算
M78佐菲5 分钟前
Linux学习笔记:目录IO与帧缓冲
linux·笔记·学习·算法
牛艺翔7 分钟前
C++ 基础知识
开发语言·c++
hongmai66688812 分钟前
把玩ESP8684-WROOM-04C-H4X:一颗耐高温的RISC-V小钢炮
笔记·单片机·嵌入式硬件·物联网·risc-v
三84415 分钟前
WordPress SQL 注入漏洞分析:从 author__not_in 参数到 REST API 全链路
linux·前端·数据库
学心理学的程序员17 分钟前
anydoc:Firecrawl 出的 Rust 文档转 Markdown,4ms 转换、14 种格式干翻 MarkItDown
开发语言·后端·rust·开源·firecrawl·claude code·anydoc
MX_935918 分钟前
Docker入门
运维·docker·容器
SCandL15219 分钟前
k8s工作原理
linux·运维·服务器
其实防守也摸鱼20 分钟前
如何使用自动化教育SRC漏洞挖掘系统--AutoHunter
运维·网络·人工智能·学习·安全·web安全·自动化
weixin_4445793025 分钟前
Rockylinux 与 K8s 的安装
linux·云原生·容器·kubernetes