Comment puis-je corriger les erreurs «$ '\ r': commande introuvable» lors de l'exécution des scripts Bash dans WSL?

23

Je reçois une erreur dans WSL en essayant d'utiliser junyanz / pytorch-CycleGAN-and-pix2pix .

J'ai suivi toutes les étapes d'installation avec succès sur Windows 10 x64 en utilisant les étapes de PyTORCH sur Windows 10: Une instruction avec des captures d'écran , puis Ubuntu pour Windows avec le bureau GitHub Comment installer et utiliser le shell Linux Bash sur Windows 10 .

Mais je suis bloqué aux dernières étapes.

C'est là que j'essaie de télécharger ou d'entraîner le modèle sous Windows. En utilisant par exemple l'invite Ubuntu Linux, je navigue manuellement jusqu'à l'endroit approprié et saisis une commande suivante comme celle ci-dessous (j'ai également essayé en mode su)

bash pretrained_models/download_pix2pix_model.sh facades_label2photo

J'obtiens une erreur immédiate, toujours la même, similaire à celles-ci:

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

Une idée?

Vincent Thomas
la source
4
Je n'ai aucune idée de ce que vous faites, mais $'\r': command not foundsuggère fortement que le problème est que vous avez utilisé un éditeur de texte Windows qui a enregistré vos fichiers avec des fins de ligne CRLF de style DOS - voir par exemple DOS vs Unix Line Endings
steeldriver
Mais je tape juste la commande directement dans l'invite de commande de Windows Ubuntu. Ne passant par aucun éditeur de texte du tout ...
Vincent Thomas
1
@VincentThomas Ceci est un fichier texte:pretrained_models/download_pix2pix_model.sh
wjandrea
Essayez la réponse ici: Comment changer la fin de ligne Windows en version Unix . Si cela fonctionne, faites-le nous savoir et nous fermerons votre question en double.
wjandrea
@wjandrea Je ne pense pas que ce soit vraiment un doublon de Comment changer la fin de ligne de Windows en version Unix . La solution raisonnable ici consiste à s'exécuter git clonedans le système WSL et à ne pas déployer d'efforts supplémentaires pour convertir chaque fichier. Si l'objectif est d'installer un logiciel dans Ubuntu, il n'y a aucune raison de le télécharger en dehors de son système de fichiers en premier.
Eliah Kagan

Réponses:

23

À l'intérieur du WSL:

sudo apt-get install dos2unix

Ensuite,

dos2unix [file]

Documentation complète:

man dos2unix

J'ai sauvé ma journée, j'espère que ça aide.

Chaim Eliyah
la source
Cela marche. J'utilisais VSCode et j'avais un script shell qui exécute certaines commandes rsync et ssh, et j'ai rencontré ce problème. J'ai installé dos2unix dans WSL comme Chaim l'a dit, et exécuté une fois, wsl dos2unix deploy.shdepuis Powershell, et maintenant, chaque fois que je tape, wsl ./deploy.shtout fonctionne parfaitement! Merci beaucoup.
Dan Zuzevich
7

steeldriver a raison : le problème est que vous avez des fichiers avec des fins de ligne Windows et que bashvous ne pouvez pas les exécuter. $'\r'est une représentation du caractère de retour chariot (CR) qui fait partie des fins de ligne DOS et Windows traditionnelles (CR LF), mais qui est absent dans les fins de ligne traditionnelles de style Unix (LF).

Comme vous le dites , vous tapez la commande pour tenter d'exécuter le script bash, mais notez que le script est réellement stocké en dehors de votre système Ubuntu (WSL), dans votre répertoire de téléchargement Windows :

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

Les chemins WSL qui commencent par /mnt/c, où cpeut être n'importe quelle lettre de lecteur Windows, sont des chemins qui accèdent aux fichiers et répertoires en dehors du système Ubuntu. En tant que chemin Windows, c'est:

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

Le fait qu'un fichier soit stocké dans votre système Windows en dehors de la zone où Ubuntu est installé ne garantit pas qu'il utilise le style Windows au lieu des fins de ligne de style Unix. Cependant, si vous avez téléchargé les fichiers avec Git dans Windows , sa configuration par défaut est de vous donner des fins de ligne de style Windows.

Le moyen le plus simple de résoudre le problème est vraiment de simplement télécharger les fichiers dont vous avez besoin dans le système Ubuntu à partir de votre bashinvite. Je vous recommande de mettre à jour complètement le système Ubuntu, puis de l'installer git dans Ubuntu, ainsi que de build-essentialfournir les outils utiles dont vous avez besoin pour compiler la plupart des logiciels à partir du code source. Pour les programmes Python, vous n'aurez peut-être pas besoin build-essential; vous pouvez l'omettre si vous le souhaitez, mais je pense que vous finirez par en avoir besoin à un moment donné.

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

Utilisez ensuite la cdcommande pour accéder à un répertoire dans lequel vous souhaitez télécharger le logiciel. Cela devrait être un répertoire de votre système Ubuntu. Par exemple, ce pourrait être votre répertoire personnel Ubuntu ou quelque part à l'intérieur. Une fois sur place, clonez le référentiel depuis GitHub. Je l'ai fait dans le srcrépertoire que j'ai créé dans mon répertoire personnel.

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

Bien sûr, vous devrez probablement installer les dépendances en premier. Pour ce faire, il suffit de suivre toutes les instructions officielles . Effectuez toutes ces étapes dans le système Ubuntu.

Eliah Kagan
la source