Linux shell: /bin/sh^M: bad interpreter: No such file or directory
运行 shell 脚本时提示如下错误:
>/bin/sh^M: bad interpreter: No such file or directory
错误通常是因为文件在 Windows 系统上被创建或编辑,然后在 Linux 或 Unix 系统上执行时出现的问题。这里的 `^M` 实际上是 Windows 下的换行符(Carriage Return,CR,`\r`)在 Linux/Unix 下的显示。
Linux/Unix 系统使用 Line Feed(LF,`\n`)作为换行符,而 Windows 系统使用 Carriage Return Line Feed(CRLF,`\r\n`)作为换行符。当你在 Windows 系统上编辑脚本文件,并将其转移到 Linux/Unix 系统上执行时,可能会出现这个问题。
要解决这个问题,你可以使用以下几种方法之一:
1. **在 Linux/Unix 系统上使用 `dos2unix` 命令转换文件**:
如果你的 Linux/Unix 系统上安装了 `dos2unix` 工具,你可以使用这个命令将文件的换行符从 CRLF 转换为 LF:
```bash
dos2unix filename
```
2. **使用 `sed` 命令删除 `\r`**:
如果你的系统上没有 `dos2unix`,你也可以使用 `sed` 命令来删除 `\r`:
```bash
sed -i 's/\r$//' filename
```
3. **在文本编辑器中设置正确的换行符**:
如果你在 Windows 系统上编辑文件,确保你的文本编辑器设置为使用 Unix 风格的换行符(LF),而不是 Windows 风格的换行符(CRLF)。许多现代文本编辑器,如 Notepad++、VS Code、Sublime Text 等,都支持这一设置。
在 Linux 上可使用 Vi/Vim 转换:
```
#查看文件格式:
:set ff 或 :set fileformat
#可以看到如下信息:
fileformat=dos
#转换为 Unix 格式:
:set ff=unix 或 :set fileformat=unix
#保存并退出
:wq
```
4. **使用 Git 进行自动转换**:
如果你是通过 Git 在不同系统之间传输文件,你可以在 Git 配置中设置 `core.autocrlf` 选项,让 Git 在检出和提交时自动转换换行符:
```bash
git config --global core.autocrlf true
```
注意:在修改文件之前,最好先备份原始文件,以防万一。
页:
[1]