文件格式引起的脚本执行错误
问题
当我们使用 Windows 桌面下的编辑器编写一个 Shell 文件时,很容易将文件使用的换行符保存为 dos 格式。如果将文件上传到 Linux 服务器执行时,可能会遇到下面的错误。这是因为
# 显示一个简单的shell文件
$ cat dosnewline.sh
#!/bin/sh
echo "This is a file with dos newline"
# 该文件使用了 dos 格式的换行符
$ od -bc dosnewline.sh
0000000 043 041 057 142 151 156 057 163 150 015 012 015 012 145 143 150
# ! / b i n / s h \r \n \r \n e c h
0000020 157 040 042 124 150 151 163 040 151 163 040 141 040 146 151 154
o " T h i s i s a f i l
0000040 145 040 167 151 164 150 040 144 157 163 040 156 145 167 154 151
e w i t h d o s n e w l i
0000060 156 145 042 015 012 015 012 015 012
n e " \r \n \r \n \r \n
0000071
# 使用 sh 执行的时候就会有一个报错
$ h dosnewline.sh
: command not found 2:
This is a file with dos newline
: command not found 4:
: command not found 5:
# 获取脚本的返回码也不是0,在一些自动化调用的场景中就会认为脚本执行失败,从而引发后续的问题
$ echo $?
127
# 退出码 127 的意思是 command not foud,对应具体的 dos 换行符所在的行
换行符
我们通常所说的换行符在 ASCII 码表中对应下面两个字符。
十进制 | 十六进制 | 字符 | 编程时 |
---|---|---|---|
10 | A | LF(Line feed,New Line) | \n |
13 | D | CR(Carriage return) | \r |
相关文章