今天在开发中遇到了 shell 脚本没法执行的情况,经过排查,最终确认是 shell 脚本在 windows 上开发,使用 windows 的换行符 CRLF 导致的,换用 linux 的换行符 LF 之后可以正常使用。
原因是 .sh 默认是按照 Windows 下的 CRLF 做回车换行的,这个在 linux 下执行就会报错,要把回车换行改成 LF

在进行转换的时候使用了notepad++的替换功能。
notepad.png
或者在右下角进行更改
UNIX.png


原理解释:

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

最后修改:2024 年 01 月 08 日
如果觉得我的文章对你有用,请随意赞赏