¿Cómo soluciono los errores “$ '\ r': comando no encontrado” que ejecuta scripts de Bash en WSL?

23

Recibo un error en WSL al intentar usar junyanz / pytorch-CycleGAN-and-pix2pix .

Seguí todos los pasos de instalación con éxito en Windows 10 x64 usando los pasos en PyTORCH en Windows 10: una instrucción con capturas de pantalla , luego Ubuntu para Windows con escritorio GitHub Cómo instalar y usar Linux Bash Shell en Windows 10 .

Pero estoy bloqueado en los últimos pasos.

Es donde intento descargar o entrenar el modelo en Windows. Utilizando, por ejemplo, el indicador de Ubuntu Linux, navego manualmente al lugar apropiado y escribo un comando siguiente como el siguiente (también lo intenté en modo su)

bash pretrained_models/download_pix2pix_model.sh facades_label2photo

Recibo un error inmediato, siempre el mismo, similar a estos:

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

¿Alguna idea?

Vincent Thomas
fuente
44
No tengo idea de lo que está haciendo, pero $'\r': command not foundsugiere fuertemente el tema es que usted ha utilizado un editor de texto de Windows que ha guardado los archivos con los finales de línea CRLF estilo DOS - véase, por ejemplo DOS vs Unix finales de línea
steeldriver
Pero solo estoy escribiendo el comando directamente en el símbolo del sistema de Windows. No pasar por ningún editor de texto en absoluto ...
Vincent Thomas
1
@VincentThomas Este es un archivo de texto:pretrained_models/download_pix2pix_model.sh
wjandrea
Pruebe la respuesta aquí: Cómo cambiar el final de línea de Windows a la versión Unix . Si funciona, infórmenos y cerraremos su pregunta como un duplicado.
wjandrea
@wjandrea No creo que esto sea realmente un duplicado de Cómo cambiar el final de línea de Windows a la versión Unix . La solución razonable aquí es ejecutarse git clonedentro del sistema WSL , y no realizar un esfuerzo adicional para intentar convertir cada archivo. Si el objetivo es instalar software en Ubuntu, no hay razón para descargarlo primero fuera de su sistema de archivos.
Eliah Kagan

Respuestas:

23

WSL interior:

sudo apt-get install dos2unix

Luego,

dos2unix [file]

Documentación completa

man dos2unix

Me salvó el día, espero que ayude.

Jaim Eliyah
fuente
Esto funciona. Estaba usando VSCode y tenía un script de shell que ejecuta algunos comandos rsync y ssh, y me encontré con este problema. Instalé dos2unix dentro de WSL como dijo Chaim, y ejecuté una vez, wsl dos2unix deploy.shdesde Powershell, y ahora, cada vez que escribo, ¡ wsl ./deploy.shtodo funciona perfectamente! Muchas gracias.
Dan Zuzevich
7

steeldriver tiene razón en que el problema es que tiene archivos con terminaciones de línea de Windows y bashno puede ejecutarlos. $'\r'es una representación del carácter de retorno de carro (CR) que forma parte de las terminaciones de línea tradicionales de DOS y Windows (CR LF), pero que está ausente en las terminaciones de línea tradicionales de estilo Unix (LF).

Como usted dice , está escribiendo el comando para intentar ejecutar el script bash, pero observe que el script en realidad está almacenado fuera de su sistema Ubuntu (WSL), en su directorio de descarga de Windows :

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

Las rutas WSL que comienzan con /mnt/c, donde cpuede haber cualquier letra de unidad de Windows, son rutas que acceden a archivos y directorios fuera del sistema Ubuntu. Como ruta de Windows, es decir:

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

El hecho de que un archivo esté almacenado en su sistema Windows fuera del área donde está instalado Ubuntu no garantiza que use terminaciones de línea estilo Windows en lugar de estilo Unix. Sin embargo, si descargó los archivos con Git en Windows , su configuración predeterminada es darle terminaciones de línea al estilo de Windows.

La forma más fácil de solucionar el problema es simplemente descargar los archivos que necesita dentro del sistema Ubuntu desde su bashsolicitud. Le recomiendo que actualice completamente el sistema Ubuntu, luego lo instale git en Ubuntu, así como también build-essentialproporciona herramientas útiles que necesita para compilar la mayoría del software a partir del código fuente. Para los programas Python, es posible que no necesite build-essential; puedes omitirlo si lo deseas, pero sospecho que terminarás necesitándolo en algún momento.

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

Luego use el cdcomando para ir al directorio donde desea descargar el software. Este debería ser un directorio dentro de su sistema Ubuntu. Por ejemplo, podría ser su directorio de inicio de Ubuntu o algún lugar dentro de él. Una vez allí, clone el repositorio de GitHub. Lo hice dentro del srcdirectorio que hice dentro de mi directorio de inicio.

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

Por supuesto, lo más probable es que primero tengas que instalar las dependencias. Para hacer eso, solo siga todas las instrucciones oficiales . Realice todos esos pasos dentro del sistema Ubuntu.

Eliah Kagan
fuente