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

本文介绍了解决从Windows环境中编辑并上传到Linux环境执行的脚本出现换行符错误的方法。原因是Windows使用 作为换行符,而Linux仅识别 。通过使用dos2unix命令转换文件格式,可以消除多余的 字符,使脚本正常运行。

结合了两份博客的内容,终于解决了这个问题。
博客一
博客二

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

可以使用dos2unix命令来转换文件格式
dos2unix a.sh	 # 步骤1
bash a.sh	 	 # 步骤2
没有dos2unix时,需要安装一下
apt-get update
apt-get install 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]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值