问题背景

在编写或运行 Shell 脚本时,有时会出现错误提示“$’r’ command not found”。这个错误消息通常出现在脚本文件在不同操作系统之间进行转移或复制时。产生这个错误的原因是因为脚本包含了某个操作系统特有的字符或格式,而当前的操作系统无法识别或解析这些字符导致的。

解决方法一:使用文本编辑器转换行尾格式

一个常见的解决方法是使用文本编辑器将脚本的行尾格式转换成当前操作系统所支持的格式。这样可以确保脚本在不同操作系统之间的兼容性。

  1. 打开脚本文件:
  2. vi script.sh
    Shell
  3. 进入 Vim 的编辑模式,通过下面的命令查看当前文件的行尾格式:
  4. :set ff?
    Shell
  5. 根据输出结果,确定当前文件的行尾格式,一般有三种情况:
    • unix - 行尾格式是 LF(\n)
    • dos - 行尾格式是 CRLF(\r\n)
    • mac - 行尾格式是 CR(\r)
  6. 使用下面的命令将文件的行尾格式转换为 unix 格式:
  7. :set ff=unix
    Shell
  8. 保存并退出文件:
  9. :wq
    Shell

解决方法二:使用 dos2unix 命令转换行尾格式

另一种解决方法是使用 dos2unix 命令将脚本文件的行尾格式转换为 unix 格式。dos2unix 是一个常用的工具,可以在终端中直接使用。

  1. 使用下面的命令安装 dos2unix:
  2. sudo apt-get install dos2unix
    Shell
  3. 将脚本文件的行尾格式转换为 unix 格式:
  4. dos2unix script.sh
    Shell
  5. 重新运行脚本文件:
  6. ./script.sh
    Shell

解决方法三:使用 sed 命令删除无效字符

如果前两种方法无效,你可以尝试使用 sed 命令来删除无效字符。sed 是一个流编辑器,可以用来处理文本文件。

  1. 使用下面的命令将脚本文件复制一份备份:
  2. cp script.sh script.sh.bak
    Shell
  3. 使用 sed 命令删除无效字符:
  4. sed -i 's/\r//' script.sh
    Shell
  5. 重新运行脚本文件:
  6. ./script.sh
    Shell