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

问题:

在windows上写的一个shell脚本,在Linux上报错,vim打开的时候看了没有啥问题,这种情况遇到很棘手,明明没有问题的脚本怎么会报错。
后来直接在另外一台linux机器scp传过来的同样的脚本就没问题。第一个脚本因为在windows上做过修改,所以怀疑是系统之间的默认编码不同导致的报错。报错内容是^M,所以查找这个报错。

解决方法:

如果是单个文件的话,直接vim打开,命令模式用set ff?查看一下编码是dos还是unix,如果是dos直接用set ff=unix就可以了,如果是批量文件的话,找到下面的方法(用sed或者vim进行替换的时候打^M不是shift+6,而是Ctrl+v+m):

基于 DOS/Windows 的文本文件在每一行末尾有一个 CR(回车)和 LF(换行),
而 UNIX 文本只有一个换行,即win每行结尾为\r\n,而linux只有一个\n,
如果win下的文档上传到linux,每行的结尾都会出现一个^M,(^M是ctrl+v,ctrl+m)
如果是单个文档的话,可以用vi打开,执行 :%s/^M//g 来去掉^M,但如里批量去
除的话就不能用vi了,
方法1: 用dos2unix工具,把win文档转换成linux下文档命令:
find ./ -type f -print0 | xargs -0 dos2unix
如果想把linux下的文档转换成win下的:
find ./ -type f -print0 | xargs -0 unix2dos方法2: 用sed命令把win文档
转换成linux下文档:
find ./ -type f print0 | xargs -0 sed -i 's/^M$//'
把linux下的文档转换成win下的
fild ./ -type f print0 | xargs -0 sed -i 's/$/^M/'

作者:小幕
链接:https://www.zhihu.com/question/22130727/answer/33814375
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
posted @ 2018-04-01 09:02  李庆喜  阅读(424)  评论(0编辑  收藏  举报