![为什么 WSL 不忽略 bash 脚本中的空行?](https://linux22.com/image/1623555/%E4%B8%BA%E4%BB%80%E4%B9%88%20WSL%20%E4%B8%8D%E5%BF%BD%E7%95%A5%20bash%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E7%9A%84%E7%A9%BA%E8%A1%8C%EF%BC%9F.png)
我最近从双启动时使用 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
。
肯定有人能给出比我的更技术性的解释。