env:bash\r \n:没有这样的文件或目录

Bri*_*lia 54 windows git bash line-endings core.autocrlf

我正在尝试从这里安装YouCompleteMe .

当我执行:

    ./install.sh --clang-completer
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

    env: bash\r: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我不知道环境变量有什么问题.这是我的bash路径:

which bash 
/bin/bash
Run Code Online (Sandbox Code Playgroud)

我需要将其更改为/ usr/bash吗?如果是,那我该怎么做?我尝试更改〜/ .bashrc文件,但它没有用.

mkl*_*nt0 97

错误消息表明您正在调用的脚本具有嵌入的\r字符,这反过来表明它具有Windows样式的\r\n行结尾而不是\n-only行结束bash期望.

作为快速修复,您可以删除\r字符.如下:

 sed $'s/\r$//' ./install.sh > ./install.Unix.sh
Run Code Online (Sandbox Code Playgroud)

然后跑

./install.Unix.sh --clang-completer
Run Code Online (Sandbox Code Playgroud)

然而,更大的问题是为什么你最终使用\r\n-style文件 - 最有可能的是,其他文件也会受到影响.

也许你在Windows上运行Git,其中典型的配置是将Unix风格的\n换行符转换为Windows样式的\r\n换行符,检查文件并重新转换为提交时的\n换行符.

虽然这对于 Windows 上的开发很有意义,但它会妨碍这样的安装方案.

为了使混帐签出文件在Windows Unix风格的文件结尾 -至少暂时-使用:

git config --global core.autocrlf false
Run Code Online (Sandbox Code Playgroud)

然后git clone再次运行您的安装命令.

要在以后恢复Git的行为,请运行git config --global core.autocrlf true.


Joh*_*ohn 35

如果您使用的是 VS Code,则可以切换到CRLFLF再次保存文件。这会将所有 CRLF 替换为 LF。

在此输入图像描述

  • 这甚至在 Windows 中也有效 (6认同)
  • 在 Windows 上测试并确认它有效。只需在保存文件后重新启动 Docker 中的容器即可。 (5认同)

sal*_*zad 19

正如上面的评论所说,这是由于 Windows 行结尾而发生的。要解决此问题,请按照以下步骤操作

对于 MAC:

brew install dos2unix # Installs dos2unix Mac
find . -type f -exec dos2unix {} \; # recursively removes windows related stuff
Run Code Online (Sandbox Code Playgroud)

对于 Linux:

sudo apt-get install -y dos2unix # Installs dos2unix Linux
sudo find . -type f -exec dos2unix {} \; # recursively removes windows related stuff
Run Code Online (Sandbox Code Playgroud)

并确保您的 git 配置设置如下:

git config --global core.autocrlf input
Run Code Online (Sandbox Code Playgroud)


igo*_*ack 15

转换行尾的快速命令:

dos2unix thescript.sh
Run Code Online (Sandbox Code Playgroud)


Tua*_*yen 13

>vim gradlew
:set fileformat=unix
:wq
>./gradlew clean build
Run Code Online (Sandbox Code Playgroud)


小智 12

变成类似的东西.您可以使用dos2unix install.sh转换行结尾.多个文件通过find [pattern] | xargs dos2unix

  • 您可以使用:`查找 . -type f -exec dos2unix {} \;` (4认同)

Car*_*rum 11

您的文件具有Windows行结尾.更改为Unix行结尾.


luc*_*ler 7

就我而言,我有一个错误的 git 配置。git 文档指出:

如果您在 Windows 上编程并与非 Windows 人员一起工作(反之亦然),您可能会在某些时候遇到行尾问题

我正在使用 Mac OS,并且在我的一个项目中确实遇到了这个问题。为了解决它,我转身autocrlftrue这是错误的。

您可以autocrlf像这样检查git 配置的状态:

git config core.autocrlf
Run Code Online (Sandbox Code Playgroud)

因此,如果这返回true并且问题发生在 git 存储库中,您必须将该配置更改为

git config --global core.autocrlf input
Run Code Online (Sandbox Code Playgroud)

在 Mac/Unix 系统上。对于仅 Windows 的项目,您可以使用

git config --global core.autocrlf false
Run Code Online (Sandbox Code Playgroud)

在我的情况下,我删除了 git 存储库并再次克隆它,之后一切都按预期工作。

https://www.git-scm.com/book/en/v2/Customizing-Git-Git-Configuration了解更多信息