: 没有那个文件或目录in/sh ,M-oM-;M-?

博客指出在Linux下出现‘没有那个文件或目录in/sh’的问题,是因Windows和Linux行尾换行符不一致导致,Windows行尾为\r\n,Linux为\n。介绍用cat -A命令查看文件情况,最后给出解决该问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

各种坑

: 没有那个文件或目录in/sh

because行位换行符的不一致所造成的,你在windows下编辑过的文件在linux下打开看的时候每一行的结尾就会多出来一个字符\r
windos 行尾 \r\n
linux 行尾 \n
^M 就是 \r,回车符号

so 找不到…
网上找了各种办法,编辑文件 :set ff=unix
不知道怎么保存…
很尴尬
打开命令 cat -A 文件名 查看结果如下
首先看一个正常的
在这里插入图片描述
接下来看一下Windows下编辑过的文件用此命令打开之后的样式

https://avatar.youkuaiyun.com/7/7/B/1_ralf_hx163com.jpg#pic_center

对比之后你就发现多出来了很多的内容
M-oM-;M-?

M-oM-;M-?   ...    ^M

补充:找到解决的方法了

解决方法如下:

[root@emm emm]#vi start.sh
然后直接输入 :set ff=unix
然后直接按 enter键
然后直接按 Esc键
然后直接输入 :wq
然后直接按 enter键   保存退出

完美解决~

<think>嗯,用户遇到了一个错误信息:“-bash: ./deploy.sh: /bin/sh^M: 坏的解释器: 没有那个文件目录”。我需要仔细分析这个问题,看看可能的原因是什么,然后给出解决方法。 首先,错误信息指出在尝试执行deploy.sh脚本时,解释器路径有问题,特别是提到了/bin/sh后面跟着^M。这个^M符号通常是Windows换行符中的回车符(CR)在Unix系统下的显示。所以,这可能是因为这个脚本是在Windows环境下编辑的,然后被复制到Unix/Linux系统中执行,导致换行符不兼容。 接下来,我需要确认这个问题的根本原因。Unix系统使用LF(\n)作为换行符,而Windows使用CRLF(\r\n)。当脚本文件在Windows中创建编辑后,换行符会被添加CR字符。当在Unix系统下运行这样的脚本时,解释器路径会被错误地解析为/bin/sh^M,系统当然找不到这个路径,所以报错。 那如何解决呢?用户可能需要转换文件的换行符,从CRLF转为LF。常用的方法是用dos2unix工具转换文件者使用sed命令删除CR字符。另外,检查脚本的shebang行是否正确,比如#!/bin/sh者#!/bin/bash,确保路径正确。 不过,用户可能不太熟悉这些工具,可能需要一步步指导。比如,安装dos2unix,者用vim打开文件进行替换。另外,可能还需要提醒用户给脚本添加执行权限,如果权限不够的话,用chmod +x deploy.sh。 有没有其他可能性?比如,确实没有/bin/sh这个解释器,但这种情况很少见,因为大多数Unix系统都会有。不过用户可能在某些特殊环境下,比如Docker镜像者精简系统中,可能确实缺少,这时候需要安装相应的包。但根据错误信息中的^M,更可能的是换行符的问题。 总结下来,步骤应该是:首先检查并转换文件的换行符,然后确保脚本有执行权限。如果用户没有dos2unix,可能需要使用其他方法,比如sed者vim的命令。同时,可能需要解释清楚为什么会出现这个问题,让用户理解根源,避免以后再次发生。</think>这个错误通常是由于脚本文件的换行符格式与 Unix/Linux 系统不兼容导致的。以下是原因和解决方法: --- ### **问题原因** 1. **Windows换行符污染** 脚本可能在 Windows 系统创建/编辑过,导致换行符为 `CRLF(\r\n)`,而 Unix/Linux 只支持 `LF(\n)`。 2. **Shebang行被破坏** 错误中的 `/bin/sh^M` 表明脚本第一行的 shebang 解释器路径被添加了多余的 `^M`(即 `\r` 回车符)。 --- ### **解决方法** #### 方法 1:用 `dos2unix` 工具转换格式 ```bash # 安装工具(如果未安装) sudo apt-get install dos2unix # Debian/Ubuntu sudo yum install dos2unix # CentOS/RHEL # 转换文件格式 dos2unix deploy.sh # 再尝试运行 chmod +x deploy.sh && ./deploy.sh ``` #### 方法 2:用 `sed` 命令删除回车符 ```bash sed -i 's/\r$//' deploy.sh chmod +x deploy.sh && ./deploy.sh ``` #### 方法 3:用 Vim 手动修复 ```bash vim deploy.sh # 进入命令模式,输入: :set ff=unix :wq ``` --- ### **预防措施** - 在跨平台编辑脚本时,使用代码编辑器(如 VS Code、Notepad++)并设置默认换行符为 `LF`。 - 避免直接用 Windows 记事本编辑脚本文件--- ### **附加验证** - 查看问题字符: ```bash cat -v deploy.sh | grep '^M' ``` 如果输出中包含 `^M`,则确认是换行符问题。 通过上述任一方法修复后,脚本即可正常执行。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值