美文网首页
解决#!/bin/bash - no such file or

解决#!/bin/bash - no such file or

作者: Sunday_SUI | 来源:发表于2019-01-28 16:31 被阅读0次

    今天,在提交shell脚本的时候,出现了以下错误:也就是#!/bin/bash - no such file or directory

    image.png
    但是我确定这个错误不是由于我代码的问题,网上找到了解决问题的办法,参考https://unix.stackexchange.com/questions/27054/bin-bash-no-such-file-or-directory
    首先检查脚本:
    head -1 yourscript | od -c
    0000000 357 273 277   #   !   /   u   s   r   /   b   i   n   /   e   n
    0000020   v       b   a   s   h  \n
    0000027
    

    发现是错误的,然后再用

    sed -i '1s/^.*#//;s/\r$//' qc3.sh
    

    成功去掉错误的符号,再次检查一下,没有问题,符合正确的

    [qiany@gm112-2 code]$  head -1 qc3.sh | od -c
    0000000   !   /   u   s   r   /   b   i   n   /   e   n   v       b   a
    0000020   s   h  \n
    0000023
    

    脚本再次运行,也没有出现错误!完美解决。

    思考为什么会出现这个问题呢?
    原因一:文件开头有BOM;
    linux上是无视BOM的,在linux上生成的文件也是不带BOM,但是在window下,windows记事本默认会给文件添加BOM头,尽管这几个字符正常情况肉眼不可见,但是在程序处理这些文件时,这些字符是能被识别到的,所以经常会出现看似正常的文件,程序处理却报错,以及window上看似正确的脚本在Linux下执行却报错。
    原因二:第一行末尾有一个回车键
    想知道是哪个原因,运行一下

    head -1 qc3.sh | od -c
    #scriptWithBom:有BOM
    0000000 357 273 277   #   !   /   b   i   n   /   b   a   s   h  \n
    #scriptWithCRLF: 有回车
    0000000   #   !   /   b   i   n   /   b   a   s   h  \r  \n
    

    其实出现这种问题的最根本的原因就是windows和unix下格式的不对等。最根本的解决方法是,在windows下写脚本的时候转化成unix格式。在Sublime text中,是在view中的Line Endings


    Sublime text windows 转化成unix

    在Notepad++中是在编辑中的文档格式转换


    Notepad++中转化成unix格式
    但是在Notepad++中转化之后仍然出现问题。所以我后来直接选择在Linux下操作。

    Linux中最简单的方法是dos2unix,不过这个命令需要安装dos2unix这个软件。

    相关文章

      网友评论

          本文标题:解决#!/bin/bash - no such file or

          本文链接:https://www.haomeiwen.com/subject/qivajqtx.html