环境变量: bash\r:没有这个文件或目录

202
我是一个有用的助手,可以为您翻译文本。

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

当我执行以下命令时:

./install.sh --clang-completer

我收到了这个错误信息:

env: bash\r: No such file or directory

我不知道环境变量出了什么问题。这是我的bash路径:
which bash 
/bin/bash

我需要将它更改为/usr/bash吗?如果是,那么我应该如何操作?我尝试更改~/.bashrc文件,但没有成功。


如果您的错误是一个错误,它可能会包含单词“error”。很好,“bash\r”文件没有被找到,因为文件名不能包含“\”。 - David Smolinski
一个快速的解决方法 :) 只需在notepad ++编辑器中编辑您的脚本并将EOL转换为UNIX(LF)。我也遇到了同样的问题,将EOL转换为UNIX(LF)后它开始工作了。 - Aryashree Pritikrishna
4
在Windows上使用WSL?参见:在安装了npm后,我在WSL Ubuntu 20.04上收到消息“/usr/bin/env: ‘bash\r’: No such file or directory”。要解决此问题,请按照回答中提供的步骤执行操作。 - Zymotik
11个回答

296
错误信息表明,你调用的脚本中嵌入了`\r`字符,这表明它使用了Windows风格的`\r\n`换行符,而不是`bash`所期望的仅有的`\n`换行符。
作为一个快速解决方法,你可以按照以下步骤删除`\r`字符。
sed $'s/\r$//' ./install.sh > ./install.Unix.sh

注意:字符串$'...'是在bashkshzsh中支持的ANSI-C quoted string。它用于确保\rsed看到脚本之前扩展为实际的CR字符,因为并非所有的sed实现都支持\r作为转义序列。
然后运行。
./install.Unix.sh --clang-completer

然而,更重要的问题是为什么你最终得到了以\r\n格式结尾的文件 - 很可能其他文件也受到了影响。
也许你正在使用Windows上的Git,在这种情况下,典型的配置是将Unix风格的\n换行符转换为Windows风格的\r\n换行符(在检出文件时),并在提交时重新转换为\n换行符。 虽然这在Windows上进行开发有点合理[1],但对于像这样的安装场景来说,它会成为一个障碍。使Git在Windows上检出具有Unix风格文件结尾的文件 - 至少是暂时的 - 使用以下命令:
git config --global core.autocrlf false

然后再次运行涉及“git clone”的安装命令。
要恢复Git的行为,请运行“git config --global core.autocrlf true”。
这些天,大多数在Windows上的编辑器和命令行界面可以互换地处理\r\n\n这两种换行符。

我曾经遇到过通过sdkman安装的sbt类似的问题。对于这种情况,首先使用whereis sbt定位有问题的脚本,然后再执行上述命令是很有用的。 - Cedric Reichenbach
无法读取./install.sh:没有这个文件或目录 - greendino

55

这是由于Windows行末符号引起的问题。要修复此问题,请按以下步骤操作:

对于MAC:

brew install dos2unix # Installs dos2unix Mac
find . -type f -exec dos2unix {} \; # recursively removes windows related stuff

对于 Linux:

sudo apt-get install -y dos2unix # Installs dos2unix Linux
sudo find . -type f -exec dos2unix {} \; # recursively removes windows related stuff

请确保您的git配置如下:

git config --global core.autocrlf input

input确保在写入对象数据库时将CRLF转换为LF。


1
非常感谢。我在运行RN项目时遇到了问题。react-native run-android无法工作。尝试了所有可能的情况来解决问题。最终这个方法帮助解决了问题。 - codehesh
@salvi 我在删除了节点模块后,按照上述步骤进行了操作,但在 VSCode 终端中它可以正常工作,但在 WSL2 终端中却不能正常工作,为什么呢? - aryat
这在 Mac 上不起作用,我仍然收到相同的消息。 - ElKePoN
@ElKePoN 确保你的 git 配置根据最后一步进行设置。 - salvi shahzad
实际上应该是 true,而不是 input。input 有什么用?正确的写法是 git config --global core.autocrlf true - ElKePoN
建议在 Windows 上使用 @ElKePoN git config --global core.autocrlf true。因为我们需要在写入对象数据库时将 CRLF 替换为 LF,然后再将 LF 转换为 CRLF 写入工作目录以保留本地的 CRLF。但是,如果你在 MAC 上使用相同的方法,就会在你的工作目录中留下 CRLF。这就是为什么使用 input,只在写入对象数据库时将 CRLF 转换为 LF,并且不进行反向转换。 - salvi shahzad

51
>vim gradlew
:set fileformat=unix
:wq
>./gradlew clean build

33

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

输入图片说明


6
即使在Windows系统中这也是有效的。 - Hessah
5
已在Windows上测试并确认可行。保存文件后,只需在Docker容器中重新启动即可正常工作。 - LucianoBAF

24

转换行尾的快速命令:

dos2unix thescript.sh

20

你的文件使用了Windows换行符,请改成Unix换行符。


16

遇到了类似的问题。可以使用dos2unix install.sh来转换行尾标识。多个文件可以通过find [pattern] | xargs dos2unix来实现。


6
您可以使用以下命令:find . -type f -exec dos2unix {} \; - s.ouchene

11
在我的情况下,我的git配置有误。git文档指出:
如果你在Windows上编程并与不是(或反之亦然)的人一起工作,你可能会在某个时候遇到换行符问题。
我正在使用Mac OS,在我的一个项目中确实遇到了这个问题。为了解决它,我将autocrlf设置为true,但这是错误的。
您可以像这样检查git配置的autocrlf状态:
git config core.autocrlf

所以如果返回值为true,而问题出现在git存储库中,则必须更改该配置为

git config --global core.autocrlf input

在 Mac / Unix 系统上。对于仅限 Windows 的项目,您可以使用{{某个软件}}。

git config --global core.autocrlf false

在我的情况下,我删除了git仓库并重新克隆了它,之后一切都像预期的那样正常工作。
请访问https://www.git-scm.com/book/en/v2/Customizing-Git-Git-Configuration以获取更多信息。

2

我以前尝试降级Flutter时遇到过这个问题

这解决了我的问题

rm -rf flutter
git config --global core.autocrlf false
git clone git@github.com:flutter/flutter.git
flutter channel stable

0
在我的情况下: 当我下载并解压 WINDOWS 版本到 MAC 电脑上时,会出现此错误。
然后我将 Windows 版本路径添加到 .bash_profile 或 .zprofile 中。
因此,对我来说解决方案是从 (.bash_profile 和 .zprofile) 中删除路径, 然后通过打开终端并输入以下内容下载 Mac 版本:
  1. mkdir src
  2. cd src
  3. git clone https://github.com/flutter/flutter.git -b stable
  4. export PATH="$PATH:pwd/flutter/bin"
  5. flutter doctor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接