Jak naprawić błędy „$ '\ r': polecenie nie znaleziono” podczas uruchamiania skryptów Bash w WSL?

23

Podczas próby użycia junyanz / pytorch-CycleGAN-and-pix2pix pojawia się błąd w WSL .

Z powodzeniem wykonałem wszystkie kroki instalacji w systemie Windows 10 x64, postępując zgodnie z instrukcjami zawartymi w PyTORCH w systemie Windows 10: instruktaż ze zrzutami ekranu , a następnie Ubuntu dla systemu Windows z pulpitem GitHub Jak zainstalować i używać powłoki Linux Bash Shell w systemie Windows 10 .

Ale jestem zablokowany na ostatnich krokach.

To tam próbuję pobrać lub wyszkolić model w systemie Windows. Korzystając na przykład z wiersza polecenia Ubuntu Linux, ręcznie nawiguję do odpowiedniego miejsca i wpisuję następujące polecenie, takie jak to poniżej (próbowałem również w trybie su)

bash pretrained_models/download_pix2pix_model.sh facades_label2photo

Otrzymuję natychmiastowy błąd, zawsze taki sam, podobny do tych:

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

Dowolny pomysł?

Vincent Thomas
źródło
4
Nie mam pojęcia, co robisz, ale $'\r': command not foundsilnie sugeruje, że problem jest, że korzystałeś z edytora tekstu Windows, który został zapisany pliki z zakończeń linii DOS-styl crlf - patrz na przykład DOS vs. Unix Linia Endings
steeldriver
Ale po prostu wpisuję polecenie bezpośrednio w wierszu polecenia systemu Windows Ubuntu. W ogóle nie przechodzi żaden edytor tekstu ...
Vincent Thomas
1
@VincentThomas To jest plik tekstowy:pretrained_models/download_pix2pix_model.sh
wjandrea
Spróbuj odpowiedzieć tutaj: Jak zmienić zakończenie linii Windows na wersję Unix . Jeśli to zadziała, daj nam znać, a my zamkniemy Twoje pytanie jako duplikat.
wjandrea
@wjandrea Nie sądzę, że jest to naprawdę duplikat sposobu zmiany zakończenia systemu Windows na wersję uniksową . Rozsądnym rozwiązaniem jest uruchomienie git clonew systemie WSL i nie podejmowanie dodatkowych wysiłków przy próbie konwersji każdego pliku. Jeśli celem jest instalacja oprogramowania w Ubuntu, nie ma powodu, aby najpierw pobierać je poza system plików.
Eliah Kagan

Odpowiedzi:

23

Wewnątrz WSL:

sudo apt-get install dos2unix

Następnie,

dos2unix [file]

Pełna dokumentacja:

man dos2unix

Uratowałem mój dzień, mam nadzieję, że to pomoże.

Chaim Eliyah
źródło
To działa. Używałem VSCode i miałem skrypt powłoki, który wykonuje komendę rsync i ssh i napotkałem ten problem. Zainstalowałem dos2unix w WSL, jak powiedział Chaim, i wykonałem raz wsl dos2unix deploy.shz Powershell, a teraz, za każdym razem, gdy piszę, wsl ./deploy.shwszystko działa idealnie! Wielkie dzięki.
Dan Zuzevich
7

steeldriver ma rację , ponieważ problem polega na tym, że masz pliki z zakończeniami linii systemu Windows i bashnie możesz ich uruchomić. $'\r'jest reprezentacją znaku powrotu karetki (CR), który jest częścią tradycyjnych zakończeń linii DOS i Windows (CR LF), ale których nie ma w tradycyjnych zakończeniach linii w stylu uniksowym (LF).

Jak mówisz , wpisujesz polecenie, aby spróbować uruchomić skrypt bash, ale zauważ, że skrypt jest faktycznie przechowywany poza systemem Ubuntu (WSL), w katalogu pobierania Windows :

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

Ścieżki WSL rozpoczynające się od /mnt/c, gdzie cmoże być dowolna litera dysku Windows, to ścieżki dostępu do plików i katalogów poza systemem Ubuntu. Jako ścieżka systemu Windows to:

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

To, że plik jest przechowywany w systemie Windows poza obszarem, w którym jest zainstalowany Ubuntu, nie gwarantuje, że używa on stylu Windows zamiast zakończeń linii w stylu Unix. Jeśli jednak pliki zostały pobrane za pomocą Git w systemie Windows , domyślną konfiguracją jest zakończenie linii w stylu Windows.

Najprostszym sposobem rozwiązania tego problemu jest naprawdę wystarczy pobrać pliki potrzebne wewnątrz systemu Ubuntu z Twojego bashpolecenia. Polecam pełną aktualizację systemu Ubuntu, a następnie instalację git w Ubuntu, a także build-essentialdostarczenie przydatnych narzędzi, które są potrzebne do skompilowania większości oprogramowania z kodu źródłowego. W przypadku programów w języku Python może nie być potrzebny build-essential; możesz to pominąć, jeśli chcesz, ale podejrzewam, że w pewnym momencie będziesz go potrzebować.

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

Następnie użyj cdpolecenia, aby przejść do katalogu, w którym chcesz pobrać oprogramowanie. Powinien to być katalog w twoim systemie Ubuntu. Na przykład może to być katalog domowy Ubuntu lub gdzieś w nim. Tam sklonuj repozytorium z GitHub. Zrobiłem to w srckatalogu, który utworzyłem w katalogu domowym.

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

Oczywiście najprawdopodobniej najpierw będziesz musiał zainstalować zależności. Aby to zrobić, postępuj zgodnie ze wszystkimi oficjalnymi instrukcjami . Wykonaj wszystkie te kroki w systemie Ubuntu.

Eliah Kagan
źródło