sh脚本报错:/bin/sh^M:bad interpreter: No such file or directory
2018-06-05| 程成| 1129| 0| Linux

今天写了个 shell 脚本,然后执行的时候,就出错了,错误信息如下:


  1. [root@localhost test]# ./test.sh   

  2. -bash: ./test.sh: /bin/sh^M: bad interpreter: No such file or directory



一、错误原因


这是由于不同系统的编码格式引起的。在 windows 下,脚本文件编码格式为 DOS 格式,每一行的行尾是以 \n\r 来标识,对应的 ASCII 码分别是 0x0D, 0x0A;而在 Linux 中,换行却是 \n,所以会出现这种错误。



二、解决方法


方法1:

为了避免换行引起的错误,Linux 提供了两种文本格式相互转化的命令:dos2unix 和 unix2dos,dos2unix 把 "\r\n" 转化成 "\n",unix2dos 把"\n"转化成"\r\n"。

命令 dos2unix 和 unix2dos 的使用非常简单,格式为:dos2unix filename


如果想更多的了解这两个命令,可以查看手册: 

man dos2unix

它会告诉你dos2unix的高级用法。



方法2:

vim filename 

然后用命令(注意是命令模式)

:set ff #查看文件编码格式,dos 或 unix, 确实是否是 dos 格式的。 

然后用 

:set ff=unix #把它强制为unix格式的, 然后存盘 :wq 退出。 

再次运行脚本。 



通过以上方法,你就可以轻松解决 sh 脚本报错:/bin/sh^M:bad interpreter: No such file or directory。




×
作者:程成
QQ:492245711