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
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

转载于:https://www.cnblogs.com/lixuebin/p/10808473.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值