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

今天,在提交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 directory)