Как исправить ошибки «$ '\ r': команда не найдена» при запуске сценариев Bash в WSL?

23

Я получаю сообщение об ошибке в WSL при попытке использовать junyanz / pytorch-CycleGAN-and-pix2pix .

Я успешно выполнил все шаги по установке в Windows 10 x64, используя шаги в PyTORCH в Windows 10: инструкция со скриншотами , затем Ubuntu для Windows с рабочим столом GitHub Как установить и использовать оболочку Linux Bash в Windows 10 .

Но я заблокирован на последних шагах.

Это то место, где я пытаюсь скачать или обучить модель в Windows. Используя, например, приглашение Ubuntu Linux, я вручную перехожу в соответствующее место и набираю следующую команду, подобную приведенной ниже (я также пробовал в режиме su)

bash pretrained_models/download_pix2pix_model.sh facades_label2photo

Я получаю немедленную ошибку, всегда одинаковую, похожую на эту:

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

Есть идеи?

Винсент Томас
источник
4
Я понятия не имею, что вы делаете, но $'\r': command not foundнастоятельно
рекомендую, чтобы проблема заключалась
Но я просто набираю команду прямо в командной строке Window Ubuntu. Ни в коем случае не проходил мимо текстового редактора ...
Винсент Томас
1
@VincentThomas Это текстовый файл:pretrained_models/download_pix2pix_model.sh
wjandrea
Попробуйте ответ здесь: Как изменить конец строки Windows на версию Unix . Если это сработает, дайте нам знать, и мы закроем ваш вопрос в двух экземплярах.
wjandrea
@wjandrea Я не думаю, что это на самом деле дубликат Как изменить окончание строки Windows на версию Unix . Разумное решение здесь - запустить git cloneв системе WSL , а не предпринимать дополнительных усилий, пытаясь преобразовать каждый файл. Если цель состоит в том, чтобы установить программное обеспечение в Ubuntu, нет оснований загружать его за пределы своей файловой системы.
Элия ​​Каган,

Ответы:

23

Внутри WSL:

sudo apt-get install dos2unix

Затем,

dos2unix [file]

Полная документация:

man dos2unix

Спас мой день, надеюсь, это поможет.

Хаим Элия
источник
Это работает. Я использовал VSCode и имел сценарий оболочки, который выполняет некоторые команды rsync и ssh, и столкнулся с этой проблемой. Я установил dos2unix внутри WSL, как сказал Хаим, и однажды выполнил wsl dos2unix deploy.shиз Powershell, и теперь, каждый раз, когда я печатаю, wsl ./deploy.shвсе работает отлично! Большое спасибо.
Дан Зузевич
7

Steeldriver прав, что проблема в том, что у вас есть файлы с окончаниями строк Windows, и bashвы не можете их запустить. $'\r'является представлением символа возврата каретки (CR), который является частью традиционных окончаний строк DOS и Windows (CR LF), но отсутствует в традиционных окончаниях строк в стиле Unix (LF).

Как вы говорите , вы вводите команду, чтобы попытаться запустить скрипт bash, но обратите внимание, что скрипт на самом деле хранится за пределами вашей системы Ubuntu (WSL), в вашем каталоге загрузки Windows :

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

WsL пути , которые начинаются с /mnt/c, где cможет быть любой буквы диска для Windows, являются путями , что доступ к файлам и каталогам вне системы Ubuntu. Как путь Windows, это:

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

То, что файл хранится в вашей системе Windows за пределами области, в которой установлена ​​Ubuntu, не гарантирует, что он использует стиль Windows вместо концов строк в стиле Unix. Однако, если вы загрузили файлы с помощью Git в Windows , его стандартная конфигурация - дать вам окончания строк в стиле Windows.

Самый простой способ решить эту проблему - просто загрузить нужные файлы в систему Ubuntu из вашего bashприглашения. Я рекомендую вам полностью обновить систему Ubuntu, а затем установить git в Ubuntu, а также build-essentialпредоставить полезные инструменты, необходимые для компиляции большинства программ из исходного кода. Для программ на Python вам может не понадобиться build-essential; Вы можете пропустить это, если хотите, но я подозреваю, что в какой-то момент вам это понадобится.

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

Затем используйте cdкоманду, чтобы перейти в каталог, в который вы хотите загрузить программное обеспечение. Это должен быть каталог в вашей системе Ubuntu. Например, это может быть ваш домашний каталог Ubuntu или где-то там внутри. Оказавшись там, клонируйте репозиторий из GitHub. Я сделал это внутри srcкаталога, который я сделал внутри моего домашнего каталога.

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

Конечно, вам, скорее всего, придется сначала установить зависимости. Для этого просто следуйте всем официальным инструкциям . Проделайте все эти шаги в системе Ubuntu.

Элия ​​Каган
источник