如何修复在 WSL 中运行 Bash 脚本时出现的“$'\r':未找到命令”错误?

如何修复在 WSL 中运行 Bash 脚本时出现的“$'\r':未找到命令”错误?

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

我按照以下步骤在 Windows 10 x64 上成功完成了所有安装步骤Windows 10 上的 PyTORCH:带有屏幕截图的说明,然后是带有 GitHub 桌面的 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

任何想法?

答案1

在 WSL 内部:

sudo apt-get install dos2unix

然后,

dos2unix [file]

完整文档:

man dos2unix

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

答案2

如果你使用的是 Windows,

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

答案3

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

正如你所说,您正在输入命令以尝试运行脚本bash,但请注意,脚本实际上存储在外部你的 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 样式的行尾。但是,如果你使用 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 系统。

答案4

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

您可以在 git 根目录下添加一个文件,.gitattributes该文件用于配置 git 的特定属性(查看完整文档)。

添加线条

# Convert to LF line endings on checkout.
*.sh text eol=lf

配置 git.sh即使在 Windows 机器上也能检出以 LF 行结尾的文件。

相关内容