今天在开发中遇到了 shell 脚本没法执行的情况,经过排查,最终确认是 shell 脚本在 windows 上开发,使用 windows 的换行符 CRLF 导致的,换用 linux 的换行符 LF 之后可以正常使用。
原因是 .sh 默认是按照 Windows 下的 CRLF 做回车换行的,这个在 linux 下执行就会报错,要把回车换行改成 LF
在进行转换的时候使用了notepad++的替换功能。
或者在右下角进行更改
原理解释:
1). Windows下换行符号是“\r\n”
回车符是 Carriage Return, C语言中是\r
;换行符是 Line Feed, C语言中是\n
;回车换行符实际是两个字符, 就是\r\n
;
而 linux 下是\n
没有\r
;
2). 所以直接把/r去掉就可以了;
或者 linux 下用指令 sed -i 's/\r$//' xx.sh