Linux 运行 sh 脚本有 \r 字符的解决方法

本文最后更新于:2022年7月5日 下午

Linux 运行 sh 脚本时可能报 \r 相关错误,本文记录解决方案。

问题复现

  • 在 Windows 下建立脚本文件 test.sh
1
2
3
4
5
6


echo "Hello World"


echo "finish"
  • 在 Linux 下运行
1
2
3
4
5
6
./test.sh: line 1: $'\r': command not found
./test.sh: line 2: $'\r': command not found
Hello World
./test.sh: line 4: $'\r': command not found
./test.sh: line 5: $'\r': command not found
finish
  • 会报出 \r 的错误
1
syntax error near unexpected token '$'do\r''

问题原因

  • Unix体系里,每行结尾只有“<换行>”,即“\n”;
  • Windows体系里面,每行结尾是“<换行><回 车>”,即“\n\r”
  • Unix 执行 Windows 生成的脚本就可能报错

解决方案

核心目标为将 \r 删除掉

  • 方法一:运行下面的语句
1
sudo dos2unix test.sh
  • 方法二:运行下面的语句,然后再运行sudo bash test1215.sh
1
sudo sed -i 's/\r//' test.sh

参考资料


Linux 运行 sh 脚本有 \r 字符的解决方法
https://www.zywvvd.com/notes/coding/shell/windows-r-error/windows-r-error/
作者
Yiwei Zhang
发布于
2022年7月5日
许可协议