解决由于CRLF导致shell脚本无法运行
在 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)
。
- VS Code:右下角点击
验证修复
在 Linux 下执行以下命令确认换行符已修正:
cat -A your_script.sh
- 正确显示:行尾应为
$
(LF)。 - 错误显示:行尾为
^M$
(CRLF)。
附加提示
- 文件权限问题:转换后确保脚本有执行权限:
chmod +x your_script.sh
- 编辑器配置:在 Windows 的编辑器中默认使用
LF
(如 VS Code 设置"files.eol": "\n"
)。
通过以上方法,可彻底解决因换行符导致的跨平台脚本执行问题。
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
Blog!
喜欢就支持一下吧