【问题标题】:Does WSL use LF line endings or CRLF line endings?WSL 使用 LF 行尾还是 CRLF 行尾?
【发布时间】:2021-09-06 20:05:10
【问题描述】:

Unix 使用 LF 行结尾。 Windows 使用 CRLF 行尾。 WSL 呢?

【问题讨论】:

  • WSL 是 Linux(不是 Unix),或者更确切地说,它托管实际的 Linux 发行版。当你安装 Ubuntu 时,你安装 Ubuntu 并运行 Ubuntu,而不是像 Ubuntu 之类的东西
  • 你为什么要问?您可以通过检查文本文件自己回答问题。您是否遇到了一些问题并假设 WSL 使用 CR+LF ?

标签: git command-line terminal windows-subsystem-for-linux


【解决方案1】:

这个问题并没有真正的答案,因为操作系统不使用行尾,应用程序使用行尾。大多数 OS API 将文件内容作为连续的字节流而不是行集合提供给应用程序,因此应用程序可以根据自己想要的任何算法来读取和写入行尾。

Windows(以及在此之前的 MS-DOS)上的约定用于应用程序以 CR LF 对指示行尾,而 Unix 上的 约定(和相关系统(例如 Linux)是让应用程序仅使用 LF。

现代应用程序通常能够读取和写入任何一种格式 - 包括最新版本的 Windows 中的记事本 - 但可能会根据这些历史惯例选择默认值。

由于在 WSL 下运行的应用程序与在真实 Linux 系统下运行的应用程序相同,因此它们可能会默认为 LF。

【讨论】:

  • 即使是内核(可能是可以称为“操作系统”的最小部分)也使用LF。例如,/proc 文件系统中代表人类可读数据的文件。同样,处理 Hash-bang 行的 binfmt 模块将读取到第一个 LF。因此,虽然它大部分只是约定,但它有时不止于此,即使它只是约定,它也非常强烈地遵循。因此,IMO 捷径“Unix 使用 LF”已经足够接近事实,可以接受。
  • @JoachimSauer 这些都是很好的例子,但我仍然认为速记具有误导性,因为它会导致像这样的混淆问题。 OP 在其 WSL 系统上的 /proc 中四处寻找的机会很小;他们更有可能在 nano 或 vim 中编辑某些内容,并使用 PHP 或 Python 运行它。这些都可以很好地处理 CR LF,即使它们被配置为默认为 LF。
猜你喜欢
  • 2020-10-16
  • 1970-01-01
  • 1970-01-01
  • 2014-07-27
  • 1970-01-01
  • 1970-01-01
  • 2011-07-25
  • 2011-04-22
  • 2017-03-21
相关资源
最近更新 更多