Linux不执行shell脚本的可能的原因——换行符
今天在开发中遇到了 shell 脚本没法执行的情况,报错如下
1 | -bash: ./xxx.sh: /bin/bash^M: bad interpreter: No such file or directory |
经过排查,最终确认是 shell 脚本在 windows 上开发,使用 windows 的换行符 CRLF 导致的,换用 linux 的换行符 LF 之后可以正常使用。
原因是 .sh 默认是按照 Windows 下的 CRLF 做回车换行的,这个在 linux 下执行就会报错,要把回车换行改成 LF
在进行转换的时候使用了notepad++的替换功能。
或者在右下角进行更改
或者在Linux终端下直接用下面的命令
1 | sed -i 's/\r$//' xx.sh |
原理解释:
1). Windows下换行符号是“\r\n”
回车符是 Carriage Return, C语言中是\r
;换行符是 Line Feed, C语言中是\n
;回车换行符实际是两个字符, 就是\r\n
;
而 linux 下是\n
没有\r
,所以直接把/r去掉就可以了。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Martin's Blog!
评论
TwikooGiscus