Como corrijo os erros “$ '\ r': command not found” executando scripts Bash no WSL?

23

Estou recebendo um erro no WSL ao tentar usar o junyanz / pytorch-CycleGAN-e-pix2pix .

Eu segui todas as etapas de instalação com sucesso no Windows 10 x64 usando as etapas do PyTORCH no Windows 10: Um manual com capturas de tela e o Ubuntu para Windows com área de trabalho GitHub Como instalar e usar o Linux Bash Shell no Windows 10 .

Mas estou bloqueado nas etapas mais recentes.

É onde estou tentando baixar ou treinar o modelo no Windows. Usando, por exemplo, o prompt do Ubuntu Linux, eu navego manualmente para o local apropriado e digito o seguinte comando como o abaixo (também tentei no modo su)

bash pretrained_models/download_pix2pix_model.sh facades_label2photo

Eu recebo um erro imediato, sempre o mesmo, semelhante a estes:

root@Azure:/mnt/c/Users/vincent/Downloads/vision/pytorch-CycleGAN-and-pix2pix# bash pretrained_models/download_pix2pix_model.sh facades_label2photo
pretrained_models/download_pix2pix_model.sh: line 2: $'\r': command not found
Note: available models are edges2shoes, sat2map, and facades_label2photo
pretrained_models/download_pix2pix_model.sh: line 4: $'\r': command not found
]pecified [facades_label2photo
pretrained_models/download_pix2pix_model.sh: line 6: $'\r': command not found
mkdir: cannot create directory ‘./checkpoints/facades_label2photo\r_pretrained\r’: No such file or directory
pretrained_models/download_pix2pix_model.sh: line 10: $'\r': command not found
WARNING: timestamping does nothing in combination with -O. See the manual
for details.

: No such file or directoryhphoto
pretrained_models/download_pix2pix_model.sh: line 12: $'\r': command not found
pretrained_models/download_pix2pix_model.sh: line 13: $'\r': command not found

Qualquer ideia?

Vincent Thomas
fonte
4
Não tenho ideia do que você está fazendo, mas $'\r': command not foundsugere fortemente que o problema é que você usou um editor de texto do Windows que salvou seus arquivos com finais de linha CRLF no estilo DOS - veja, por exemplo, finalizações de linha DOS vs. Unix
steeldriver
Mas estou apenas digitando o comando diretamente no prompt de comando do Windows Ubuntu. Não passando por nenhum editor de texto em tudo ...
Vincent Thomas
1
@VincentThomas Este é um arquivo de texto:pretrained_models/download_pix2pix_model.sh
wjandrea 27/10
Tente a resposta aqui: Como alterar o final de linha do Windows para a versão Unix . Se funcionar, informe-nos e encerraremos sua pergunta como duplicada.
Wjandrea 27/10
@wjandrea Eu não acho que isso seja realmente uma duplicata de Como alterar o final de linha do Windows para a versão Unix . A solução razoável aqui é executar git clonedentro do sistema WSL e não realizar esforços extras tentando converter cada arquivo. Se o objetivo é instalar o software no Ubuntu, não há razão para fazer o download fora do sistema de arquivos primeiro.
Eliah Kagan 27/10

Respostas:

23

Dentro da WSL:

sudo apt-get install dos2unix

Então,

dos2unix [file]

Documentação completa:

man dos2unix

Salvou meu dia, espero que ajude.

Chaim Eliyah
fonte
Isso funciona. Eu estava usando o VSCode e tinha um script de shell que executa alguns comandos rsync e ssh e me deparei com esse problema. Instalei o dos2unix na WSL, como Chaim disse, e executei uma vez, wsl dos2unix deploy.shno Powershell, e agora, toda vez que digito, wsl ./deploy.shtudo funciona perfeitamente! Muito obrigado.
Dan Zuzevich
7

steeldriver está correto que o problema é que você possui arquivos com terminações de linha do Windows e bashnão pode executá-los. $'\r'é uma representação do caractere de retorno de carro (CR) que faz parte das terminações de linha tradicionais DOS e Windows (CR LF), mas que está ausente nas terminações de linha tradicionais (LF) no estilo Unix.

Como você diz , você está digitando o comando para tentar executar o script bash, mas observe que o script é realmente armazenado fora do sistema Ubuntu (WSL), no Windows diretório de download do :

/mnt/c/Users/vincent/Downloads/vision/pytorch-CycleGAN-and-pix2pix

Os caminhos WSL iniciados com /mnt/c, onde cpode haver qualquer letra de unidade do Windows, são caminhos que acessam arquivos e diretórios fora do sistema Ubuntu. Como um caminho do Windows, ou seja:

C:\Users\vincent\Downloads\vision\pytorch-CycleGAN-and-pix2pix

Que um arquivo está armazenado no seu sistema Windows fora da área em que o Ubuntu está instalado não garante que ele use finalizações de linha no estilo Windows em vez de no estilo Unix. No entanto, se você baixou os arquivos com o Git no Windows , sua configuração padrão é fornecer finais de linha no estilo do Windows.

A maneira mais fácil de corrigir o problema é apenas baixar os arquivos que você precisa dentro do sistema Ubuntu a partir do seu bashprompt. Eu recomendo que você atualize completamente o sistema Ubuntu e instale git no Ubuntu, além de build-essentialfornecer ferramentas úteis necessárias para compilar a maioria dos softwares a partir do código-fonte. Para programas Python, talvez você não precisebuild-essential ; você pode omitir se quiser, mas suspeito que você acabará precisando disso em algum momento.

sudo apt update && sudo apt upgrade && sudo apt install git build-essential

Em seguida, use o cdcomando para ir para um diretório em que você deseja baixar o software. Este deve ser um diretório dentro do seu sistema Ubuntu. Por exemplo, poderia ser o diretório inicial do Ubuntu ou algum lugar lá dentro. Uma vez lá, clone o repositório do GitHub. Eu fiz isso dentro do srcdiretório que criei dentro do meu diretório pessoal.

cd ~/src
git clone https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix.git

Obviamente, você provavelmente precisará instalar as dependências primeiro. Para fazer isso, basta seguir todas as instruções oficiais . Execute todas essas etapas no sistema Ubuntu.

Eliah Kagan
fonte