Come posso correggere gli errori "$ '\ r': comando non trovato" durante l'esecuzione degli script Bash in WSL?


23

Ricevo un errore in WSL mentre provo ad usare junyanz / pytorch-CycleGAN-and-pix2pix .

Ho seguito con successo tutti i passaggi di installazione su Windows 10 x64 usando i passaggi di PyTORCH su Windows 10: un'istruzione con schermate , quindi Ubuntu per Windows con desktop GitHub Come installare e utilizzare Linux Bash Shell su Windows 10 .

Ma sono bloccato negli ultimi passaggi.

È dove sto cercando di scaricare o addestrare il modello in Windows. Usando ad esempio il prompt di Ubuntu Linux, navigo manualmente nella posizione appropriata e digito un comando seguente come quello qui sotto (ho anche provato in modalità su)

bash pretrained_models/download_pix2pix_model.sh facades_label2photo

Ricevo un errore immediato, sempre lo stesso, simile a questi:

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

Qualche idea?


4
Non ho idea di quello che stai facendo, ma $'\r': command not foundsuggerisco fortemente che il problema è che hai utilizzato un editor di testo di Windows che ha salvato i tuoi file con terminazioni di riga CRLF in stile DOS - vedi ad esempio le terminazioni di riga DOS vs Unix
— steeldriver

Ma sto solo digitando il comando direttamente nel prompt dei comandi di Windows Ubuntu. Non passare per nessun editor di testo ...
— Vincent Thomas,

1
@VincentThomas Questo è un file di testo:pretrained_models/download_pix2pix_model.sh
— wjandrea,

Prova qui la risposta: Come cambiare il finale di linea di Windows alla versione Unix . Se funziona, faccelo sapere e chiuderemo la tua domanda come duplicato.
— wjandrea,

@wjandrea Non penso che questo sia davvero un duplicato di Come cambiare il finale di linea di Windows alla versione Unix . La soluzione ragionevole qui è eseguire git cloneall'interno del sistema WSL e non intraprendere ulteriori sforzi nel tentativo di convertire ciascun file. Se l'obiettivo è installare software in Ubuntu, non c'è motivo di scaricarlo prima al di fuori del suo filesystem.
— Eliah Kagan,

Risposte:


23

All'interno di WSL:

sudo apt-get install dos2unix

Poi,

dos2unix [file]

Documentazione completa:

man dos2unix

Mi hai salvato la giornata, spero che sia d'aiuto.


Questo funziona Stavo usando VSCode e avevo uno script di shell che esegue alcuni comandi rsync e ssh, e ho riscontrato questo problema. Ho installato dos2unix in WSL come ha detto Chaim, ed eseguito una volta, wsl dos2unix deploy.shda Powershell, e ora, ogni volta che scrivo, wsl ./deploy.shtutto funziona perfettamente! Molte grazie.
— Dan Zuzevich,

7

steeldriver ha ragione nel dire che il problema è che hai file con terminazioni di linea di Windows e bashnon puoi eseguirli. $'\r'è una rappresentazione del carattere di ritorno a capo (CR) che fa parte delle terminazioni di riga DOS e Windows tradizionali (CR LF), ma è assente nelle terminazioni di linea in stile Unix tradizionale (LF).

Come dici tu , stai digitando il comando per tentare di eseguire lo script bash, ma noti che lo script è effettivamente archiviato al di fuori del tuo sistema Ubuntu (WSL), nella directory di download di Windows :

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

I percorsi WSL che iniziano con /mnt/c, dove cpuò essere una qualsiasi lettera di unità di Windows, sono percorsi che accedono a file e directory all'esterno del sistema Ubuntu. Come percorso di Windows, ovvero:

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

Il fatto che un file sia archiviato nel tuo sistema Windows al di fuori dell'area in cui è installato Ubuntu non garantisce che utilizzi terminazioni di linea in stile Windows anziché in stile Unix. Tuttavia, se hai scaricato i file con Git in Windows , la sua configurazione predefinita è quella di fornirti terminazioni di linea in stile Windows.

Il modo più semplice per risolvere il problema è semplicemente scaricare i file necessari all'interno del sistema Ubuntu dal bashprompt. Ti consiglio di aggiornare completamente il sistema Ubuntu, quindi installarlo git in Ubuntu, oltre a build-essentialfornire strumenti utili di cui hai bisogno per compilare la maggior parte del software dal codice sorgente. Per i programmi Python, potrebbe non essere necessario build-essential; puoi ometterlo se vuoi, ma sospetto che finirai per averne bisogno ad un certo punto.

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

Quindi utilizzare il cdcomando per accedere a una directory in cui si desidera scaricare il software. Questa dovrebbe essere una directory all'interno del tuo sistema Ubuntu. Ad esempio, potrebbe essere la tua home directory di Ubuntu o da qualche parte al suo interno. Una volta lì, clonare il repository da GitHub. L'ho fatto nella srcdirectory che ho creato nella mia home directory.

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

Naturalmente, molto probabilmente dovrai prima installare le dipendenze. Per farlo, basta seguire tutte le istruzioni ufficiali . Fai tutti questi passaggi all'interno del sistema Ubuntu.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.