/bin/bash^M: bad interpreter: No such file or directory

好久没有写bash脚本了,这两天在写一个网站受到攻击自动开始CF五秒盾的bash脚本,利用CF的API可以很轻松的写完这个脚本,可是测试的时候出问题了,提示

/bin/bash^M: bad interpreter: No such file or directory

以前我遇到过好多次这个问题,依稀记得是windows 和unix的编码不一样,换行符的标志也不一样. windows 是CR LF表示一行结尾,而unix用LF表示一行的结尾。

知道了问题的原因,解决起来就好说多了.

  1. 直接将windows下的编辑器的脚本编码转换,转换为unix格式,然后再去unix下执行. 对于ultraedit来说,路径是 File–>Conversions–>DOS->UNIX;对于notepad++来说,路径是setting-> Preferences-> New Document -> Unix, 或者在正在编辑的文件上,点击Edit -> EOL Conversion -> Unix

2) 在unix服务器上,直接运行dos2unix命令,将bash文件转化为unix下的文件

3) vi 命令解决. 首先可以用”vi -b cloudflare.sh”命令,来查看这个bash文件里面隐藏的字符,然后用”vi cloudflare.sh”打开,按下ESC键进入命令行模式,输入下面的命令:

:set ff=unix

:wq

将文本格式设置为unix格式