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
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    BZOJ 1568: [JSOI2008]Blue Mary开公司
    BZOJ 3165: [Heoi2013]Segment
    BZOJ 2733: [HNOI2012]永无乡
    BZOJ 4631: 踩气球
    BZOJ 4530: [Bjoi2014]大融合
    BZOJ 4919: [Lydsy1706月赛]大根堆
    BZOJ 5442: [Ceoi2018]Global warming
    BZOJ 4027: [HEOI2015]兔子与樱花
    BZOJ 5441: [Ceoi2018]Cloud computing
    php的抓取
  • 原文地址:https://www.cnblogs.com/lixuebin/p/10808473.html
Copyright © 2011-2022 走看看