env: bash \ r: Não existe esse arquivo ou diretório


96

Estou tentando instalar o YouCompleteMe a partir daqui .

Quando eu executo:

./install.sh --clang-completer

Eu recebo este erro:

env: bash\r: No such file or directory

Não sei o que há de errado com as variáveis ​​de ambiente. Este é o meu caminho bash:

which bash 
/bin/bash

Eu preciso mudar para /usr/bash? Se sim, como devo fazer isso? Tentei alterar o ~/.bashrcarquivo, mas não funcionou.


Se o seu erro for um erro, provavelmente conterá a palavra "erro". É bom que o arquivo "bash \ r" não tenha sido encontrado porque os nomes dos arquivos não podem conter "\".
David Smolinski

Uma solução rápida :) basta editar seu script no editor notepad ++ e alterar a conversão EOL para UNIX (LF). Eu também enfrentei o mesmo problema depois de alterar a conversão EOL para UNIX (LF) e começar a trabalhar.
Aryashree Pritikrishna

Respostas:


163

A mensagem de erro sugere que o script que você está chamando possui \rcaracteres incorporados , o que, por sua vez, sugere que ele possui terminações de linha no estilo do Windows, em\r\n vez das \nterminações bashesperadas apenas de linha .

Como uma solução rápida , você pode remover os \rcaracteres. do seguinte modo:

sed $'s/\r$//' ./install.sh > ./install.Unix.sh

Nota: A $'...'cadeia é um ANSI-C string suportado em bash, kshe zsh. É usado para garantir que a \rexpansão para um caractere CR real antes de sedver o script, porque nem todas as sedimplementações oferecem suporte \rcomo uma sequência de escape.

e então correr

./install.Unix.sh --clang-completer

No entanto, a grande questão é por que você acabou com \r\narquivos -style - provavelmente, outros arquivos também foram afetados.

Talvez você esteja executando o Git no Windows , onde uma configuração típica é converter \nquebras de linha somente no estilo Unix em quebras de \r\nlinha no estilo Windows ao fazer check-out de arquivos e reconvertê- \nlos em quebras de linha somente na confirmação .

Embora isso faça sentido para o desenvolvimento no Windows, atrapalha cenários de instalação como esses.

Para fazer o Git retirar arquivos com terminações de arquivo no estilo Unix no Windows - pelo menos temporariamente - use:

git config --global core.autocrlf false

Em seguida, execute os comandos de instalação envolvendo git clonenovamente.

Para restaurar o comportamento do Git mais tarde, execute git config --global core.autocrlf true.



17

Seu arquivo tem terminações de linha do Windows. Mude para terminações de linha Unix.


14

Encontrei algo semelhante. Você pode usar dos2unix install.shpara converter os finais de linha. Vários arquivos viafind [pattern] | xargs dos2unix


1
Você pode usar:find . -type f -exec dos2unix {} \;
s.ouchene

13

Comando rápido para converter o final da linha:

dos2unix thescript.sh

6

Como dizem os comentários acima, isso está acontecendo devido ao fim das linhas do Windows. Para corrigir o problema, siga estas etapas

Para MAC:

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

Para Linux:

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

E certifique-se de que sua configuração git esteja definida da seguinte maneira:

git config --global core.autocrlf input

1
Trabalhando finalmente. Eu estava enfrentando esse problema por 2 dias e era por causa dos finais de linha do windows do projeto que eu clonei do github e finalmente sua solução foi a solução perfeita. obrigado.
Riddhi de

1
Estou feliz que tenha ajudado você :)
salvi shahzad

sim, ele acordou. obrigado @salvishahzad
Mohit Tomar

5

No meu caso, eu tinha uma configuração git errada. A documentação do git afirma:

Se você está programando no Windows e trabalhando com pessoas que não o fazem (ou vice-versa), provavelmente terá problemas de finalização de linha em algum momento

Estou usando o Mac OS e tenho exatamente esse problema em um dos meus projetos. Para resolvê-lo eu me virei autocrlfpara trueo que era errado.

Você pode verificar o autocrlfestado de sua configuração git assim:

git config core.autocrlf

Então, se isso retornar truee o problema ocorrer dentro de um repositório git, você terá que alterar essa configuração para

git config --global core.autocrlf input

em um sistema Mac / Unix. Apenas para projetos do Windows que você pode usar

git config --global core.autocrlf false

No meu caso, apaguei o repositório git e o clonei novamente e depois disso tudo funcionou como esperado.

Saiba mais em https://www.git-scm.com/book/en/v2/Customizing-Git-Git-Configuration


você salvou meu dia. Eu estava lutando com este problema de final de linha por 2 dias.
Tahmidur Rahman

2

No meu caso, eu tinha uma configuração git errada. A documentação do git afirma:

Se você está programando no Windows e trabalhando com pessoas que não o fazem (ou vice-versa), provavelmente terá problemas de finalização de linha em algum momento

Estou usando o Mac OS e tenho exatamente esse problema em um dos meus projetos. Para resolvê-lo eu atento autocrlfpara true.

Você pode verificar o autocrlfestado de sua configuração git assim:

git config core.autocrlf

Então, se isso retornar truee o problema ocorrer dentro de um repositório git, você terá que alterar essa configuração para

git config --global core.autocrlf input

qual é o correto para sistemas Mac / Unix. Apenas para projetos do Windows que você pode usar

git config --global core.autocrlf false

No meu caso, apaguei o repositório git e verifiquei novamente e depois disso tudo funcionou como esperado.

Saiba mais em https://www.git-scm.com/book/en/v2/Customizing-Git-Git-Configuration


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.