shell脚本报错$’r’ command not found怎么解决

发布时间:2022-02-17 15:36:45 作者:iii
来源:亿速云 阅读:210
# Shell脚本报错`$'\r' command not found`怎么解决

## 问题现象

当执行Shell脚本时,可能会遇到类似以下报错:
```bash
./test.sh: line 2: $'\r': command not found

bash: ./script.sh: /bin/bash^M: bad interpreter: No such file or directory

这种错误通常发生在Windows环境下编写脚本后,直接在Linux/Unix系统运行的情况。

原因分析

根本原因是换行符差异: - Windows系统使用CRLF\r\n)作为行尾 - Linux/Unix系统使用LF\n)作为行尾

当包含CR\r)字符的脚本在Linux执行时,\r会被视为普通字符,导致解释器尝试执行$'\r'这个”命令”。

解决方案

方法1:使用dos2unix工具转换

# 安装dos2unix(如未安装)
sudo apt-get install dos2unix  # Debian/Ubuntu
sudo yum install dos2unix      # CentOS/RHEL

# 转换文件格式
dos2unix your_script.sh

方法2:使用sed命令删除CR字符

sed -i 's/\r$//' your_script.sh

方法3:用vim转换

vim your_script.sh
# 在命令模式下输入
:set ff=unix
:wq

方法4:使用tr命令

tr -d '\r' < original.sh > fixed.sh
chmod +x fixed.sh

方法5:在Git中配置自动转换(预防措施)

git config --global core.autocrlf input

验证修复

修复后可通过以下方式检查:

cat -v your_script.sh | grep '^M'  # 应无输出
file your_script.sh                # 应显示"ASCII text"

预防措施

  1. 开发环境配置

    • 在Windows下使用VS Code等编辑器时,右下角切换行尾为LF
    • 配置Git的换行符自动转换
  2. 编辑器设置

    // VS Code settings.json
    "files.eol": "\n"
    
  3. CI/CD流程

    • 在构建流程中加入换行符检查
    • 使用pre-commit钩子验证脚本格式

扩展知识

通过正确处理换行符问题,可以避免这类跨平台脚本执行错误。 “`

注:实际字数为约580字,可根据需要补充更多细节或具体案例。文章包含了问题现象、原因分析、多种解决方案、验证方法和预防措施,采用Markdown格式便于阅读和代码展示。

推荐阅读:
  1. bash:$'\r': command not found 报错的解决
  2. 源码安装并且成功启动mysql后输入mysql报错:command not found

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

shell

上一篇:shell语法怎么检查

下一篇:Linux shell使用注意事项有哪些

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》