当前位置: 首页 > backend >正文

解决 Linux Bash 脚本因换行符问题导致的 “bash^M: No such file or directory“ 错误

一、问题重现

最近在部署一个 Bash 脚本时遇到一个诡异的问题:

```bash
$ chmod +x deploy.sh
$ ./deploy.sh
/usr/bin/env: ‘bash\r’: No such file or directory
```

明明脚本内容正确,权限也设置好了,为什么会出现这样的错误?

二、问题根源

经过排查发现,这个错误的根本原因是换行符格式问题:

1. Windows 换行符(CRLF):`\r\n`(回车+换行)
2. Unix/Linux 换行符(LF):`\n`(仅换行)

当脚本在 Windows 系统编辑后保存,会使用 CRLF 格式。而 Linux 系统只能识别 LF 格式,因此当它看到 `\r\n` 时:
• 把 `\r` 当作命令名的一部分(变成 `bash\r`)

• 系统找不到名为 `bash\r` 的命令,于是报错


三、解决方案

方法 1:使用 dos2unix 工具

最简单直接的方法是使用 `dos2unix` 工具转换换行符:

```bash
# 安装 dos2unix(如果未安装)
sudo apt-get install dos2unix  # Ubuntu/Debian
sudo yum install dos2unix      # CentOS/RHEL

# 转换文件
dos2unix deploy.sh
```

方法 2:使用 sed 命令

如果没有 dos2unix,可以用 sed 命令手动删除 `\r` 字符:

```bash
sed -i 's/\r$//' deploy.sh
```

方法 3:VS Code 编辑器转换

1. 用 VS Code 打开脚本文件
2. 右下角状态栏会显示当前换行符格式(CRLF 或 LF)
3. 点击换行符标识,选择 "LF"
4. 保存文件

四、如何验证换行符格式

检查文件换行符格式的方法:

```bash
# 方法 1:cat -v 命令
cat -v deploy.sh | head -n 1
# 如果输出中出现 ^M,则说明有 Windows 换行符

# 方法 2:file 命令
file deploy.sh
# 会显示 "with CRLF line terminators" 或 "ASCII text"
```

五、为什么换行符会造成问题?

1. 历史原因:
   • Windows 继承了 DOS 的 `\r\n` 换行格式

   • Unix/Linux 使用简洁的 `\n` 换行格式


2. 技术原理:
   • `\r` 是回车(Carriage Return),把光标移回行首

   • `\n` 是换行(Line Feed),把光标移到下一行

   • Windows 要求两者配合使用,Unix/Linux 只需要 `\n`

http://www.xdnf.cn/news/7255.html

相关文章:

  • 在CentOS系统上部署GitLabRunner并配置CICD自动项目集成!
  • ubuntu下配置vscode生成c_cpp_properties.json
  • 【大数据】MapReduce 编程-- PageRank--网页排名算法,用于衡量网页“重要性”-排序网页
  • 展锐Android14及更新版本split_build编译方法
  • 百度OCR:证件识别
  • Python将Excel单元格某一范围生成—截图(进阶版—带样式+批量+多级表头)
  • 《黑马前端ajax+node.js+webpack+git教程》(笔记)——ajax教程(axios教程)
  • 确保高质量的音视频通话,如何最大化利用视频带宽
  • win10 上删除文件夹失败的一个原因:sqlYog 备份/导出关联了该文件夹
  • 【QT】一个界面中嵌入其它界面(二)
  • 星云智控v1.0.0产品发布会圆满举行:以创新技术重构物联网监控新生态
  • 线程池模式与C#中用法
  • 解决服务器重装之后vscode Remote-SSH无法连接的问题
  • Vue百日学习计划Day33-35天详细计划-Gemini版
  • 基于tar包安装,创建两个tomcat实例
  • CLIP:论文阅读 -- 视觉模型
  • 【MySQL成神之路】MySQL常用语法总结
  • Django 项目中,将所有数据表注册到 Django 后台管理系统
  • 从纸质契约到智能契约:AI如何改写信任规则与商业效率?​——从智能合约到监管科技,一场颠覆传统商业逻辑的技术革命
  • Ubuntu 20.04 postgresql
  • 通用简洁工作汇报项目评估营销策划工作总结年终汇报PPT模版8套一组分享
  • 什么是子网委派?
  • 一文了解VR拍摄制作
  • 数据库性能调优:索引设计、缓存配置与查询计划优化
  • 《告别低效签约!智合同如何用AI重构商业“契约时代”》​​——解析智能合约技术的爆发与行业变革
  • 企业智慧业务中台规划建设与应用全景解析
  • upload-labs靶场通关详解:第11关
  • UCOS 嵌入式操作系统
  • BGP传播规则
  • 1.5 MouseDown,MouseUp,LostMouseCapture的先后顺序