问题描述

  今天把windows上编写好的sh脚本,然后放到linux上执行,出现了上面的错误,表示linux系统无法识别\r。

问题解决

  安装dos2unix来进行换行符的转换。

// 1.检查是否dos2unix,如果什么都没打印表示没有安装
 rpm -qa|grep dos2unix
// 2.安装dos2unix
// Debian/Ubuntu 上安装
apt-get install dos2unix
// 在 CentOS/RHEL 上安装
yum install dos2unix
// 在 Fedora 上安装
dnf install dos2unix
// 3.转换
// 进入文件所在位置
cd /
// 转换换行符
dos2unix test.sh

  转换成功:

转换后执行sh脚本就不会报错了。

博学而笃志,切问而近思

  问题原因:Linux和Windows系统中换行符的主要区别在于使用的字符不同‌。在Linux和Unix系统中,每行文本的结尾使用一个字符表示换行,即换行符(Line Feed,LF),用“\n”表示。而在Windows系统中,每行文本的结尾使用两个字符表示换行,即回车符(Carriage Return,CR)和换行符(Line Feed,LF)的组合,用“\r\n”表示‌。所以window中用换行时比linux多了个\r,才会提示无法识别\r。

 dos2unix :要将 DOS/Windows 文件转换为 Unix/Linux 格式。其中2表示to,转换的意思。

 与之相反的

 unix2dos:要将 Unix/Linux 文件转换为 DOS/Windows 格式。

 用法

// dos2unix 文件名(多个文件用空格隔开)
dos2unix test.sh
dos2unix test1.sh test2.sh
// unix2dos 文件名(多个文件用空格隔开)
unix2dos test.sh
unix2dos test1.sh test2.sh

  除此之外还有其他用法。通过dos2unix -h 和 unix2dos -h 获取

结语

  虽然是个小问题,但平时多注意的话就能减少一些不必要的错误,从而减少去排查的时间。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐