解决在 Bash(或 Cygwin)上找不到 R 命令
命令的行为有时可能与您预期的不同,即使您看起来一切都正确,例如 bash 的情况:'\r': command not found
或类似的错误消息,例如 syntax error near unexpected token $'\r'
。
当您看到此类错误消息时,您必须理解错误消息。 在这种情况下,它必须处理回车符 \r
,它指示终端将光标移动到行的开头。
本文将帮助您了解错误消息以及如何解决或防止此类错误再次发生。
解决bash: '\r': command not found With Notepad++
不同的操作系统行为不同,Windows 通常是不同的。 如前所述,\r 字符的存在是导致此错误的原因。
\r
与换行符有关,换行符在不同操作系统中的管理方式不同。
与 Unix 和现代 Mac 不同,Windows 使用不同的换行样式,它使用 \n(LF - 换行)和 \r(CR - 回车)作为换行字符样式和旧 Mac(OS X 之前的 macOS)。
Unix、Linux 和现代 Mac 仅使用 \n 来开始一个新行,这在终端处理文本时很重要。
因此,如果您是 Windows PC(可能运行 Cygwin、Git Bash 或 WSL2 - 适用于 Linux 的 Windows 子系统),您尝试运行的脚本很可能包含您可能拥有的 CRLF 字符(\r\n 作为换行符) 在 Windows 的默认记事本编辑器中看到。
有了这个以及您创建的脚本或文件的可能性,您正在使用基于 Windows 的编辑器运行命令,您有 Windows 样式(或 CRLF)行尾并且需要摆脱 CRLF 字符。
一个简单的解决方案是使用像 Notepad++ 这样的编辑器将文件格式更改为 Unix 字符格式 LF,这样它就不会显示以下命令。
bash: '\r': command not found
syntax error near unexpected token `$'\r'
`fi
在您的操作系统(Windows 或 Mac)上使用 Notepad++ 打开您正在使用的脚本,并通过双击 Windows (CR LF)/Macintosh (CR) 选项卡并更改为 Unix (LF) 来更改文件格式设置。
之后,在新配置的脚本上运行相同的命令,你应该不会有任何问题。
让我们使用包含以下内容的简单脚本文件重新创建相同的问题。
#!/bin/bash
echo "Testing the Carriage Return Character"
echo "Behavior"
echo "Wow! It works"
预期输出(没有错误):
Testing the Carriage Return Character
Behavior
Wow! It works
我们保存了默认Windows风格结尾的脚本文件,运行脚本文件的结果如下。
虽然它仍然输出 echo 语句,但它给了我们 '\r': command not found。 让我们用 Unix (LF) 格式保存同一个文件。
现在,错误消息不存在。
解决 bash: '\r': command not found With dos2unix
当您在终端(或 Cygwin 终端)中时,您可能不想使用文本编辑器进行一些行结束更改。 这就是 dos2unix 与我们的 bash: '\r': command not found 问题有关的地方。
使用 dos2unix,您可以将 DOS (Windows) 或 Mac 格式换行符中的文件 - 纯文本转换为脚本 - 转换为 UNIX 格式换行符。
我们的 script.sh 上的一个简单的 dos2unix 命令将解决我们的错误消息。
dos2unix.exe script.sh
您可能会收到未找到的命令,尤其是当您使用 Windows 上的 Cygwin 终端并且尚未安装该软件包时。
Linux 附带了大多数典型的发行版,但如果你没有,你可以使用下面的命令或按照安装指南进行操作。
sudo apt install tofrodos
要在 macOS 上安装 dos2unix,您可以安装 MacPorts,然后使用下面的命令或通过 Brew 按照安装指南进行操作。
sudo port install dos2unix
要在 Cygwin 上安装,您需要单击安装文件以更新现有安装。 之后,您应该会看到“选择包”屏幕和一个搜索栏。
使用搜索栏,搜索 dos2unix
并双击跳过值(您应该会看到版本号)。 之后,单击下一步并完成安装。
现在,让我们在脚本上尝试 dos2unix
命令。
如您所见,该命令将 script.sh 文件更改为命令输出所示的 Unix 格式,并且当我们运行相同的脚本时,错误消息不再存在。
dos2unix: converting file script.sh to Unix format...
解决 bash: '\r': command not found With sed
sed 是一个 Unix 实用程序,可帮助我们解析和转换可通过 Linux 终端(包括 Cygwin)获得的文本。 有了它,我们可以过滤掉尾随的 \r
字符,而不会导致我们的脚本出现问题。
下面的命令可以帮助删除 \r
字符并消除我们在使用某些 RegEx 表达式和实用程序时遇到的错误消息。
sed -i 's/\r$//' script.sh
在您的情况下,您可以将 script.sh 替换为文件名。
让我们在 CRLF 样式的脚本 script.sh 上尝试使用 sed 命令。
现在,我们摆脱了 $ '\r': command not found
的困扰。
使用这三种替代方法,您可以通过在工作时将脚本文件保存为 Unix (LF) 格式来轻松避免此问题。 但是,如果它是我们可以阻止的并且只是我们碰巧可以访问的文件,我们可以使用 dos2unix 或 sed 命令来处理错误。
相关文章
解决 Nodemon Command Not Found
发布时间:2023/06/09 浏览次数:122 分类:操作系统
-
本文将讨论如何解决和处理 nodemon command not found 错误。使用npm解决Nodemon Command Not Found 通过 npm,我们可以安装有用的功能库、包和工具来改进我们在 NodeJS 平台上的开发。
解决在 Cygwin中的错误 Make Command Not Found
发布时间:2023/06/09 浏览次数:190 分类:操作系统
-
本文将讨论处理 bash: make: command not found in Cygwin 的方法。通过安装解决bash: make: command not found in Cygwin
Bash 中的错误处理
发布时间:2023/06/09 浏览次数:134 分类:操作系统
-
本文介绍了 bash 中的错误处理。 请记住,了解退出代码、选项(如 errexit 和 trap)使我们能够构建健壮的脚本并更有效地管理 bash 问题。Bash 中的退出代码 基于退出代码处理错误是检测命令失败
Bash 中 Curl 命令的 Urlencode 数据
发布时间:2023/06/09 浏览次数:175 分类:操作系统
-
本文将教我们如何在 bash 中为 curl 命令对数据进行 urlencode。 让我们从 curl 命令的语法开始。Bash 中的 curl 命令 curl 命令的基本语法如下:
在 Bash 中获取绝对路径
发布时间:2023/06/09 浏览次数:96 分类:操作系统
-
在这篇 Bash 文章中,我们将学习在 Linux 中获取绝对路径的不同方法。 我们还将学习一些不同的 Linux 命令来获取文件的绝对路径。
Bash Nohup 与 & 的区别
发布时间:2023/06/09 浏览次数:137 分类:操作系统
-
这篇简短的文章介绍了通过 Bash 在后台运行 Linux 进程的 nohup 命令和 & 控制运算符。 此外,我们将进一步研究 nohup 和 & 之间的主要区别。在后台运行 Linux 进程
在 Bash 中重命名文件
发布时间:2023/06/09 浏览次数:50 分类:操作系统
-
在本文中,我们将介绍一种方法,通过它您可以轻松地重命名目录中的所有文件。 此外,我们将看到必要的示例和解释,以使主题更容易理解。在 Bash 中使用 mv 命令重命名文件
在另一个 Bash 脚本中包含脚本文件
发布时间:2023/06/09 浏览次数:79 分类:操作系统
-
本文讨论了将一个 Bash 脚本文件包含到另一个脚本文件中的不同方法。在 Bash 脚本中包含文件 在 Bash 中包含或重用脚本非常简单。