linux执行sh脚本报错:$’\r’: 未找到命令的完美解决方法

  • Post category:Linux

当在 Linux 上执行一个包含 Windows 回车符的 .sh 文件时,可能会报错:

bash: ./test.sh: /bin/bash^M: 坏的解释器: 没有那个文件或目录

或者

/bin/bash^M: 命令不存在

或者

syntax error: unexpected end of file

这些错误一般是由于文本文件在 Windows 中编写并使用 Windows 格式进行换行符而不是 Unix 格式(LF),即 \r\n 而不是 \n,因此需要我们修改文件格式。

我们可以使用 dos2unix 命令来将 .sh 文本文件从 Windows 格式转换为 Unix 格式(删除所有 \r)。

示例1:

# 先安装 dos2unix
sudo apt-get install dos2unix

# 转换文件格式
dos2unix test.sh

# 执行脚本
./test.sh

在转换文件格式之后,我们重新执行 .sh 文件,就可以成功地运行它了。

示例2:

# 使用 sed 命令替换文件格式
sed -i 's/\r//' test.sh

# 执行脚本
./test.sh

如果你遇到了以上的问题,可以尝试使用以上的解决方法来解决问题。