在Linux中执行脚本的时候,有时候会遇到/bin/bash^M这样的错误,有时就是会报“坏的解释器: 没有那个文件或目录”这样的错误,但是找来找去,不知道什么原因。

那此时你就要心里有个底了,可能是这个脚本被人从windows上改变过,导致在Linux下出现了无法识别、无法执行的特殊字符。

具体是什么样的特殊字符呢?

在windows下使用某些文件编辑器进行批量替换后,文件中会产生一些隐藏字符,其实是ascii中的'\r'对于windows下使用不影响,但是上传到Linux后会出现 ^M 这样的字符。

如果是空格,则可能会出现 M-BM- 这样的字符。

识别方法有二:

1、vi -b

2、cat -A

修正方法有三:

1、vim 替换 ^M

vim [文件]
# 打开文件

:%s/^M//g
# 替换为空字符

注意,^M 需要使用 ctrl + m打出

2、sed替换 M-BM-

sed 's/\xc2\xa0/ /g' -i [文件]
# 替换其十六进制编码

3、dos2unix转换

这个工具不是内置命令,需要额外安装

yum install -y dos2unix

dos2unix [文件]
# 转换windows文件为unix格式文件

其他特殊字符:

^H 是ascii中的'\b' :表示按 Backspace(退格)键。

@ 空字符,ascii码是0,在程序里一般写作”\0”,在 vim 里就显示成 @。