«

shell脚本每行后面多了一个^M的原因和解决办法

时间:2024-2-22 14:06     作者:韩俊     分类: Linux


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 种。

标签: linux

热门推荐