在 Windows 下编写的脚本因使用 CRLF(回车换行)作为换行符,而 Linux 仅支持 LF(换行符),会导致脚本执行错误(如 ^M 报错)。以下是解决方案:


解决方法

1. 使用工具转换换行符

  • dos2unix 工具(推荐):
    在 Linux 终端运行以下命令安装并转换文件:

    sudo apt-get install dos2unix  # Debian/Ubuntu
    sudo yum install dos2unix      # CentOS/RedHat
    dos2unix your_script.sh        # 转换文件
    
  • sed 命令

    sed -i 's/\r$//' your_script.sh  # 删除行尾的CR字符
    
  • Vim 编辑器

    vim your_script.sh
    # 在Vim中输入以下命令后保存退出
    :set ff=unix
    :wq
    

2. 配置 Git 自动转换换行符(预防未来问题)

如果脚本通过 Git 同步到 Linux,可配置 Git 在提交代码时自动转换换行符:

git config --global core.autocrlf input
  • Windows 用户core.autocrlf true
  • Linux/macOS 用户core.autocrlf input

3. 手动替换换行符(无工具时)

  • 用文本编辑器(如 VS Code、Notepad++)打开脚本,选择换行符为 LF
    • VS Code:右下角点击 CRLF → 选择 LF
    • Notepad++:菜单栏 编辑文档格式转换转为 Unix (LF)

验证修复

在 Linux 下执行以下命令确认换行符已修正:

cat -A your_script.sh
  • 正确显示:行尾应为 $(LF)。
  • 错误显示:行尾为 ^M$(CRLF)。

附加提示

  • 文件权限问题:转换后确保脚本有执行权限:
    chmod +x your_script.sh
    
  • 编辑器配置:在 Windows 的编辑器中默认使用 LF(如 VS Code 设置 "files.eol": "\n")。

通过以上方法,可彻底解决因换行符导致的跨平台脚本执行问题。

文章作者: oohmygosh
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Blog
喜欢就支持一下吧