shell 脚本每行后面多了一个 ^M 的原因和解决办法。
在开发过程中,有时候不小心将 Windows 本地创建的 shell 脚本(以 .sh 结尾的脚本),传到 linux 系统中,通过 vi 或者 view 命令查看文件时,发现在末尾发现出现了很多 ^M 字符。
^M 是什么?
这个字符就是换行符,是由于跨平台解析的原因,因为 windows 和 Linux 下对行尾的换行的定义不同。
Windows: \r\n
Linux/Unix: \n
Mac: \r
解决方法
如果需要转换,我们只需要转换文件格式即可。你可以选择直接在服务器上调整。包括如下三种方式。
(1)使用 linux 命令 dos2unix filename,直接把文件转换为unix格式
(2)使用 sed 命令sed -i "s/\r//" filename 或者 sed -i "s/^M//" filename 直接替换结尾符为 unix 格式,如果需要批量替换的话,可以直接:
sed -i "s/\r//" /shell/*.sh #将该目录内所有后缀名为 sh 的文件的 \r 替换掉 sed -i "s/\r//" /shell/* #将该目录内所有文件的 \r 替换掉
(3)vi filename 打开文件,执行 :set ff=unix 设置文件为 unix,然后执行 :wq 保存成 unix 格式。
推荐第 2 种。