找回密码
 立即注册
搜索
查看: 977|回复: 0

Linux shell: /bin/sh^M: bad interpreter: No such file or directory

[复制链接]

267

主题

0

回帖

1154

积分

管理员

积分
1154
发表于 2024-2-23 09:54:37 | 显示全部楼层 |阅读模式

运行 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:

dos2unix filename
  1. 使用 sed 命令删除 \r

如果你的系统上没有 dos2unix,你也可以使用 sed 命令来删除 \r

sed -i 's/\r$//' filename
  1. 在文本编辑器中设置正确的换行符

如果你在 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
  1. 使用 Git 进行自动转换

如果你是通过 Git 在不同系统之间传输文件,你可以在 Git 配置中设置 core.autocrlf 选项,让 Git 在检出和提交时自动转换换行符:

git config --global core.autocrlf true

注意:在修改文件之前,最好先备份原始文件,以防万一。


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|棱讯科技 ( 粤ICP备2024228160号-2|粤公网安备44030002003510号 )

GMT+8, 2024-11-21 17:43 , Processed in 0.016279 second(s), 3 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表