shell脚本执行错误 $'\r':command not found

本文介绍了解决在Linux环境下执行从Windows编辑的脚本时出现的$’ ’:commandnotfound错误的方法。该问题源于Windows与Linux换行符的不同,通过使用dos2unix工具可以轻松解决。

在linux上执行脚本时出现$’\r’:command not found,然而仔细检查脚本,对应行位置只是一个空行,并没有问题,那么linux为什么会将一个回车的空行报错?

原因是这样的:脚本是在window下编辑完成后上传到linux上执行的,win下的换行是回车符+换行符,也就是\r\n,而unix下是换行符\n。linux下不识别\r为回车符,所以导致每行的配置都多了个\r,因此是脚本编码的问题。

在linux上执行 dos2unix 脚本名,再次执行脚本,报错消失。

在 Unix/Linux 环境中执行 Shell 脚本时,出现 `$'\r': command not found` 错误通常与脚本文件的换行符格式有关。Windows 和 Linux 系统在换行符的表示上存在差异:Windows 使用 `\r\n` 作为换行符,而 Linux 仅使用 `\n`,因此当一个在 Windows 上编辑的脚本文件被直接复制到 Linux 系统中执行时,Shell 会将 `\r` 视为无效命令的一部分,从而导致报错[^2]。 ### 问题原因 - **换行符格式不兼容**:脚本文件包含 Windows 风格的换行符 `\r\n`,而 Linux Shell 无法识别 `\r`。 - **文件编码格式**:脚本文件保存时使用的编码或格式未设置为 Unix 兼容格式。 ### 解决方法 #### 方法一:使用 `vim` 修改文件格式为 Unix 1. 打开脚本文件: ```bash vim your_script.sh ``` 2. 设置文件格式为 Unix: ```vim :set ff=unix ``` 3. 保存并退出: ```vim :wq ``` 这会将文件中的所有 `\r\n` 换行符转换为 `\n` 格式[^2]。 #### 方法二:使用 `dos2unix` 工具转换格式 1. 安装 `dos2unix`(如未安装): ```bash sudo apt install dos2unix ``` 2. 转换文件格式: ```bash dos2unix your_script.sh ``` 此工具专门用于将 Windows 格式的文本文件转换为 Unix 格式,操作简洁高效[^3]。 #### 方法三:使用 `sed` 删除 `\r` 字符 如果无法使用 `vim` 或 `dos2unix`,可以使用 `sed` 命令删除所有 `\r` 字符: ```bash sed -i 's/\r//' your_script.sh ``` 该命令会直接在文件中替换所有 `\r` 字符为空,从而清除换行符问题[^4]。 #### 方法四:检查文件并转换格式(使用 `file` 命令) 1. 使用 `file` 命令检查文件类型: ```bash file your_script.sh ``` 如果输出中包含 `CRLF`,则说明文件使用 Windows 换行符。 2. 使用 `tr` 命令去除 `\r`: ```bash tr -d '\r' < your_script.sh > new_script.sh ``` 该命令会生成一个不包含 `\r` 字符的新脚本文件[^1]。 --- ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值