为什么 WSL 不忽略 bash 脚本中的空行?

为什么 WSL 不忽略 bash 脚本中的空行?

我最近从双启动时使用 Ubuntu 切换到在 WSL 上使用它。我有一个在 Ubuntu 上运行良好的 bash 脚本,然后我将其从 GitHub repo 克隆到 Windows。当我尝试在 WSL 中运行脚本时,出现以下错误:

batch.sh: line 2: $'\r': command not found

如何使用 Windows 安装的 git 克隆 repo,以便换行符处理与 WSL 兼容?


编辑:这个问题被重新表述了很多次,以便更准确地描述问题。

答案1

这不是 WSL 的错。

当您在 Windows 上安装 git 时,安装程​​序会询问您希望使用哪种换行符处理方式。您必须选择“Checkout as CRLF, commit as LF”。因此,git 会\r在您的文本文件中插入 Linux 上不存在的额外字符(如果存在,您会收到相同的错误)。

.gitconfig您可以在主目录 ( ) 中的文件中更改此设置C:\Users\YourUsername。它称为core.autocrlf。可能的值包括:

  • true(您当前的设置)
  • input(按原样签出,提交 LF)
  • false(签出并按原样提交)。

答案2

我设法解决了我的具体问题。bash 脚本是从克隆的 GitHub 存储库复制到 Windows 的,但是我从 cmd 克隆了存储库。当我从 WSL 克隆存储库时,问题得到了解决。问题的原因可能与两个操作系统处理/解释字符的方式不同\n有关\r

肯定有人能给出比我的更技术性的解释。

相关内容