在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 里就显示成 @。