如何解决在WSL中运行Bash脚本的“ $'\ r':找不到命令”错误?


23

尝试使用junyanz / pytorch-CycleGAN-and-pix2pix时,WSL出现错误。

我使用Windows 10上PyTORCH上的步骤成功完成了Windows 10 x64上的所有安装步骤:带有屏幕截图的说明,然后是具有GitHub桌面的Windows版Ubuntu for Windows 如何在Windows 10上安装和使用Linux Bash Shell

但是我被最新的步骤挡住了。

这是我尝试在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强烈建议这个问题是您使用的Windows文本编辑器使用DOS风格的CRLF行尾保存了文件-例如,参见DOS vs. Unix Line
Ends

但是我只是直接在Window Ubuntu命令提示符下键入命令。根本没有经过任何文本编辑器...
Vincent Thomas

1
@VincentThomas这是一个文本文件:pretrained_models/download_pix2pix_model.sh
wjandrea

在这里尝试答案:如何将Windows行尾更改为Unix版本。如果有效,请告知我们,我们将重复处理您的问题。
wjandrea

@wjandrea我不认为这真的与如何将Windows行尾更改为Unix版本重复。合理的解决方案是在WSL系统中运行git clone,而不要花费额外的精力尝试转换每个文件。如果目标是在Ubuntu中安装软件,则没有理由先在文件系统外下载软件。
伊莱亚·卡根

Answers:


23

WSL内部:

sudo apt-get install dos2unix

然后,

dos2unix [file]

完整文档:

man dos2unix

救了我一天,希望对您有所帮助。


这可行。我使用的是VSCode,并且有一个执行某些rsync和ssh命令的Shell脚本,并遇到了这个问题。我像Chaim所说的那样在WSL中安装了dos2unix,并wsl dos2unix deploy.sh从Powershell中执行了一次,现在,每次键入时,wsl ./deploy.sh一切都运行良好!非常感谢。
Dan Zuzevich

7

steeldriver是正确的,问题是您的文件带有Windows 行尾并且bash无法运行。$'\r'是回车符(CR)的表示形式,它是传统DOS和Windows行尾(CR LF)的一部分,但在传统的Unix风格的行尾(LF)中却不存在。

如您所说,您正在键入命令以尝试在中运行脚本bash,但是请注意,该脚本实际上存储在Windows的 Ubuntu(WSL)系统外部下载目录中的:

/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风格的行结束的区域。但是,如果您在Windows中使用Git下载了文件,则其默认配置是为您提供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系统中执行所有这些步骤。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.