脚本文件中的行尾符格式不正确导致的脚本无法执行问题如何解决?

例子:

错误:
在这里插入图片描述

如果执行./prebuilts_download.sh 报错,错误是:

-bash: ./prebuilts_download.sh:/bin/bash^M:解释器错误: 没有那个文件或目录

原因:通常是由于脚本文件中的行尾符格式不正确导致的。 特别是当你在 Windows 系统上编辑了 Bash 脚本,然后将其复制到 Linux 或 macOS 系统上时,会发生此问题。
Windows 使用回车符+换行符 (\r\n) 作为行尾符,而 Linux 和 macOS 使用换行符 (\n)。 ^M 实际上就是回车符 (\r) 在某些编辑器中的显示方式。

麻烦执行:
sudo apt-get install dos2unix
dos2unix prebuilts_download.sh
./prebuilts_download.sh
如果不可用,可尝试 sed:
sed -i ‘s/\r$//’ prebuilts_download.sh
./prebuilts_download.sh

本质问题:

可能是由于你在执行git命令之后导致的。
说明你的文件或环境存在一些配置或操作,导致经常使用或产生这种格式的文件。以下是一些可能的原因:

1.Git 配置: Git 在 Windows 环境下,默认会将检出的文件转换为 Windows 换行符。

1.检查 core.autocrlf 配置:
git config --global core.autocrlf

如果输出是 true,表示 Git 会自动将文件转换为 Windows 换行符。

2.纠正方式:
git config --global core.autocrlf input  # 推荐
#或者
git config --global core.autocrlf false  # 禁用自动转换

input 设置会在检出时保留换行符不变,提交时将 CRLF 转换为 LF。 false 则禁用自动转换。

2.代码编辑器配置: 你使用的代码编辑器可能默认保存文件时使用 Windows 风格的换行符 (CRLF)。许多编辑器允许你配置默认的换行符类型。

Notepad++: 编辑 -> 行尾符转换 -> 选择 Unix (LF) 或 macOS (LF)。
VS Code: 文件 -> 首选项 -> 设置,搜索 “files.eol”,设置为 \n。

3.跨平台开发:

如果你在 Windows 和 Linux/macOS 之间共享代码,并且没有正确配置 Git 或编辑器,很容易导致换行符不一致。

4.IDE 或工具链:

某些 IDE 或工具链在生成文件时可能默认使用 Windows 换行符。

5.脚本生成或转换:

如果你在脚本中生成文本文件,确保脚本使用正确的换行符。在 Python 中,使用 \n 表示换行:

with open('file.txt', 'w', newline='\n') as f:
    f.write("Line 1\nLine 2\n")

newline=‘\n’ 确保使用 Unix 换行符。

复制粘贴: 从 Windows 应用程序复制文本并粘贴到云端文本编辑器或终端中,可能引入 Windows 换行符。

如何诊断和解决:

1.确定问题文件: 使用 file file.py 或 cat -vte file.py 命令来检查文件是否包含 ^M 字符 (即 \r)。

2.批量转换: 使用 find 和 dos2unix 可以批量转换目录中的所有文件:


 `find . -type f -print0 | xargs -0 dos2unix`

3.配置编辑器和 Git: 确保你的代码编辑器和 Git 使用正确的换行符配置。

4.检查脚本: 检查你编写的脚本,确保在生成文件时使用正确的换行符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值