如何修复在 WSL 中运行 Bash 脚本的“$'\r': command not found”错误?

Vin*_*mas 72 command-line bash software-installation windows-10 windows-subsystem-for-linux

我在尝试使用junyanz/pytorch-CycleGAN-and-pix2pix 时在 WSL 中遇到错误。

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

但是我在最新的步骤中被阻止了。

这是我尝试在 Windows 中下载或训练模型的地方。例如,使用 Ubuntu Linux 提示符,我手动导航到适当的位置并键入如下命令(我也在 su 模式下尝试过)

bash pretrained_models/download_pix2pix_model.sh facades_label2photo
Run Code Online (Sandbox Code Playgroud)

我收到一个即时错误,总是一样的,类似于这些:

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
Run Code Online (Sandbox Code Playgroud)

任何的想法?

Cha*_*yah 86

WSL内部:

sudo apt-get install dos2unix
Run Code Online (Sandbox Code Playgroud)

然后,

dos2unix [file]
Run Code Online (Sandbox Code Playgroud)

完整文档:

man dos2unix
Run Code Online (Sandbox Code Playgroud)

拯救了我的一天,希望它有所帮助。

  • 如果你得到 `E: Unable to locate package dos2unix`,首先运行 `sudo apt-get update`。 (3认同)
  • [另一种选择](/sf/answers/2303900721/) 将是`sed -i 's/\r$//' path/to/file` (2认同)

Eli*_*gan 16

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
Run Code Online (Sandbox Code Playgroud)

以 开头的 WSL 路径/mnt/c(其中c可以是任何 Windows 驱动器号)是访问Ubuntu 系统之外的文件和目录的路径。作为 Windows 路径,即:

C:\Users\vincent\Downloads\vision\pytorch-CycleGAN-and-pix2pix
Run Code Online (Sandbox Code Playgroud)

文件存储在安装 Ubuntu 的区域之外的Windows 系统中并不能保证它使用 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
Run Code Online (Sandbox Code Playgroud)

然后使用该cd命令转到您要下载软件的目录。这应该是你的 Ubuntu 系统中的一个目录。例如,它可能是你的 Ubuntu 主目录或里面的某个地方。在那里,从 GitHub 克隆存储库。我是src在我的主目录中创建的目录中完成的。

cd ~/src
git clone https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix.git
Run Code Online (Sandbox Code Playgroud)

当然,您很可能必须先安装依赖项。为此,只需按照所有官方说明进行操作Ubuntu 系统中执行所有这些步骤。


小智 16

如果您使用的是 Windows,

  1. 在 NotePad++ 上打开 shell 文件
  2. 单击顶部栏菜单上的编辑,然后选择 EOL Conversion --> Unix(LF)
  3. 现在将这个文件复制到你的 Linux 系统中,它应该不会出现这些错误。

  • 像魅力一样工作! (3认同)

小智 9

我在 WSL 环境中使用 VS code 来编辑 bash 脚本。将右下角的设置从“CRLF”更改为“LF”为我解决了这个问题。

VSCode 窗口


小智 5

我遇到了这个问题,解决方案是将 git 配置为以 Linux 行结束方式检出特定文件。

您可以将文件添加到您的 git 根目录名称.gitattributes,该文件为 git配置特定属性(请参阅完整文档)。

添加行

# Convert to LF line endings on checkout.
*.sh text eol=lf
Run Code Online (Sandbox Code Playgroud)

配置 git 以签出.sh带有 LF 行结尾的文件,即使在 Windows 机器上也是如此。


fli*_*fly 5

如果你手头有 vim,它会很快解决你的问题。

vim $filename +"set ff=unix" +wq
Run Code Online (Sandbox Code Playgroud)