linux 下 shell脚本报错:-bash: ./build.sh: /bin/sh^M: bad interpreter: No such file or directory

Shell代码  :build.sh
#!/bin/sh

set -x

SOURCE_DIR=`pwd`
BUILD_DIR=${BUILD_DIR:-../build}

mkdir -p $BUILD_DIR 
  && cd $BUILD_DIR 
  && cmake $SOURCE_DIR 
  && make $*

上述代码来源于网络上学习大并发服务器开发的源码。

上传到Ubuntu上,刚开始执行 

./build.sh

报下面错误:

-bash: ./build.sh: Permission denied

原来是没有赋予执行权限,执行

chmod 764 build.sh

赋予用户执行权限。

接着报以下错误:

-bash: ./build.sh: /bin/sh^M: bad interpreter: No such file or directory

经过网上查找,看到该篇博文https://www.cnblogs.com/zyb-pp/p/6429448.html 的解决办法后,成功解决。写此文仅用于记录,便于日后排查。

主要原因是build.sh是在windows下编辑然后上传到linux系统里执行的。.sh文件的格式为dos格式。而linux只能执行格式为unix格式的脚本。

我们可以通过vi编辑器来查看文件的format格式。步骤如下:

1.首先用vi命令打开文件

vi build.sh

2.在vi命令模式中使用 

:set ff 

可以看到改文件的格式为dos

3.修改文件format为unix

方法一:使用vi修改文件format

命令:set ff=unix

:set ff=unix

执行完后再通过set ff命令查看文件格式,结果如下:

然后执行 ./build.sh就不回报错了。

原文地址:https://www.cnblogs.com/chenleideblog/p/11766082.html