zoukankan      html  css  js  c++  java
  • 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每行结尾为rn,而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
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    系统振动的稳定性分析
    算法
    九眼智能:信息安全是网络发展的关键
    运用大数据技术筑起网络安全防火墙
    网络安全维护九眼智能大数据显身手
    九眼智能大数据技术助力网络信息安全
    九眼智能:用大数据技术为网络信息加层“滤网”
    大数据如何解决人工智能对文本挖掘的挑战
    “键盘侠”行为规则出台网络信息盼清洁
    灵玖NLPIRParser大数据挖掘系统智能摘要
  • 原文地址:https://www.cnblogs.com/lixuebin/p/10808473.html
Copyright © 2011-2022 走看看