什么是 ^M 以及它是如何生成的?

What is ^M and how is it generated?

最近,有人(正在使用 Windows10)问我他的 VSCode 的远程 (ssh) 连接不可用。经过大量检查,我发现他的 ~/.ssh/authorized_keys"^M" 结尾(在 Vim 中),删除该符号解决了他的问题。

到modify/remove“^M”很容易。但是这次我想弄清楚什么是“^M”,它是如何产生的?了解它是如何生成的将有助于人们避免生成“^M”和相关问题。

^M 是 Vim 的 ASCII 13 表示(M 是字母表中的第 13 个字母),回车 return。 ssh 假定该文件将使用 Unix 行结尾,因此它将 DOS 文件中 CR/LF 对的 CR 视为常规字符,而不是将其视为行终止符而忽略。删除 ^M 实质上会将文件从 DOS 文本文件转换为 ssh 期望的 POSIX 文本文件。