问题描述
今天在执行代码时出现了这样的错误:
bash xxx.sh
xxx.sh: line 2: $'\r': command not found
xxx.sh: line 7: $'\r': command not found
xxx.sh: line 8: syntax error near unexpected token `$'do\r''
经查阅,发现是.sh文件在windows下编辑,导致linux系统不能正确处理换行符所致,打开notepad++,也印证了这个说法:
正常的linux下的换行符是LF,windows下的换行符是CRLF。
解决方案
1. 使用dos2unix命令
要将Windows下的换行符(\r\n
)转换为Linux下的换行符(\n
),您可以使用dos2unix
命令。这是一个常用的工具,用于在Unix/Linux系统中将文本文件从DOS/Windows格式转换为Unix格式。
Ubuntu下dos2unix可以使用以下命令安装,别的操作系统用类似的intsall方法安装:
sudo apt update
sudo apt install dos2unix
安装完成后,执行
dos2unix file.sh
这里的file.sh是你要转换的文件。
2. 直接编辑文件
如果您的系统上没有安装dos2unix
命令,您可以通过以下步骤手动转换换行符:
- 打开终端。
- 使用
vim
编辑器打开.sh文件。例如:vim file.sh
。 - 在vim中,输入以下命令切换到底行模式:
:
。 - 输入以下命令替换文件中的换行符:
%s/\r$//
。 这个命令会将每行末尾的\r
(即回车符)替换为空字符串,从而删除Windows换行符。 - 按下回车键执行替换操作。
- 输入以下命令保存文件并退出vim:
wq。
大功告成!