Technical discuss

shell脚本文件换行符转换 (如果之前是CRLF,需要转换)

更多
2026-01-15 10:48 - 2026-01-15 10:55 #1021 by service
新帖
Code:
dos2unix xxx.sh
# 或者
Code:
sed -i 's/\r$//' smart_health_final.sh -----------
bash 运行时的错误 

xxx.sh: line 2: $'\r': command not found 
和 
warning: here-document at line 20 delimited by end-of-file (wanted 'EOF') 

都清楚地表明了问题所在:脚本文件的换行符是 Windows 风格的 CRLF (Carriage Return + Line Feed, \r\n)而不是 Linux/Unix 风格的 LF (Line Feed, \n)。
Linux 的 Bash 解析器无法正确处理 Windows 风格的 CRLF 换行符,它会把每一行末尾的 \r (回车符) 当作一个无效的命令尝试执行,导致 command not found 错误,并且破坏了多行字符串 (here-document) 的解析。
解决方案:
将脚本文件的换行符从 CRLF 转换为 LF。先尝试使用 dos2unix 命令进行转换,这是处理此类问题的标准工具。转换后应该就能正常执行脚本了。
Last edit: 2026-01-15 10:55 by service.

登录注册一个帐号 参加讨论