linux执行脚本sh xxx.sh
报错:$'xxx\r': 未找到命令
原因:shell脚本在Windows编写导致的换行问题: Windows 的换行符号为 CRLF(\r\n),而 Unix\Linux 为 LF(\n)。
缩写 | 全称 | ASCII转义 | 说明 |
---|---|---|---|
CR | Carriage Return | \r | 回车 |
LF | Linefeed | \n | 换行,Unix\Linux 的换行符 |
CRLF | Carriage Return & Linefeed | \r\n | 回车并换行,Windows 的换行符 |
解决:
vim 转换为 Unix 换行
bash
# 查看文件格式信息
$ file xxx.sh
xxx.sh: a /usr/bin/env bash\015 script, ASCII text executable, with CRLF line terminators
#-----------------------------------------------
# 转换为 Unix 格式换行
$ vim xxx.sh
:set ff=unix
:wq
#-----------------------------------------------
# 再次查看文件格式信息
$ file xxx.sh
xxx.sh: a /usr/bin/env bash script, ASCII text executable