执行shell脚本报/bin/bash^M: bad interpreter错误的解决

这篇具有很好参考价值的文章主要介绍了执行shell脚本报/bin/bash^M: bad interpreter错误的解决。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

执行shell脚本报/bin/bash^M: bad interpreter错误的解决,问题集,Linux,bash,开发语言,shell,编码格式
转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。


问题描述:

在notepad++里面编辑修改了shell脚本,再上传到服务器执行,出现“-bash: ./test.sh: /bin/bash^M: bad interpreter: No such file or directory”的报错:

[root@test102 ~]# ./test.sh 
-bash: ./test.sh: /bin/bash^M:  bad interpreter: No such file or directory
[root@test102 ~]# 

原因分析:

这个问题可能是因为脚本文件在windows下编辑过。就有可能被转换成Windows下的dos文本格式了,这样的格式每一行的末尾都是以\r\n来标识,它的ASCII码分别是0x0D,0x0A。如果你将这个脚本文件直接放到Linux上执行就会报/bin/bash^M: bad interpreter错误提示。
windows下,每一行的结尾是\n\r,而在linux下文件的结尾是\n,
那么你在windows下编辑过的文件在linux下打开看的时候每一行的结尾就会多出来一个字符\r。
用cat -A file.sh时你可以看到这个\r字符被显示为^M,这时候只需要删除这个字符就可以了。
可以使用命令sed -i ‘s#\r$##g’ file.sh 。

解决方法1——修改换行符:

1、查看脚本文件的换行符,果然是多个^M:

[root@test102 ~]# cat -A test.sh 
#!/bin/bash^M$
   touch /home/test1^M$
   echo "test1" >>/home/test1^M$
   echo "test2" >>/home/test1^M$
   ^M$
   [root@test102 ~]#
	 

2、替换换行符:

[root@test102 ~]# sed -i 's#\r$##g' test.sh 

3、检查修改后的文件,换行符已经替换OK,换行符已经是$了:

[root@test102 ~]# cat -A test.sh 
#!/bin/bash$
   touch /home/test1$
   echo "test1" >>/home/test1$
   echo "test1" >>/home/test1$
   $
[root@test102 ~]# 

4、执行脚本,OK了

[root@test102 ~]# ./test.sh 
[root@test102 ~]# 
[root@test102 ~]# cat /home/test1 
test1
test1
[root@test102 ~]# 

注意:
最然使用cat -A看到的换行符是^MKaTeX parse error: Expected 'EOF', got '#' at position 26: …时候不能用 sed -i 's#̲\^M##g’ test.sh 来替换,替换不成功的:

[root@test102 ~]# sed -i 's#\^M$##g' test.sh 
[root@test102 ~]# 
[root@test102 ~]# 
[root@test102 ~]# ./test.sh 
-bash: ./test.sh: /bin/bash^M:  bad interpreter: No such file or directory   #同样无法执行
[root@test102 ~]# 
[root@test102 ~]# 
[root@test102 ~]# cat -A test.sh          #cat -A查看文件会发现文件换行符其实没有改成功的
#!/bin/bash^M$
   touch /home/test1^M$
   echo "test1" >>/home/test1^M$
   echo "test1" >>/home/test1^M$
   ^M$
[root@test102 ~]# 
[root@test102 ~]# 

解决方法2——修改文本格式:

用vim命令打开要检查的脚本文件,然后用
:set ff?
命令检查一下,看看是不是dos字样,如果是dos格式的,继续执行
:set ff=unix
然后执行
:qw
保存退出即可:

执行结果发现文本格式真的是dos的格式:
执行shell脚本报/bin/bash^M: bad interpreter错误的解决,问题集,Linux,bash,开发语言,shell,编码格式

执行shell脚本报/bin/bash^M: bad interpreter错误的解决,问题集,Linux,bash,开发语言,shell,编码格式

然后用命令:set ff=unix修改:
执行shell脚本报/bin/bash^M: bad interpreter错误的解决,问题集,Linux,bash,开发语言,shell,编码格式

修改之后格式变成了unix:
执行shell脚本报/bin/bash^M: bad interpreter错误的解决,问题集,Linux,bash,开发语言,shell,编码格式

然后保存退出,执行脚本就OK了:

[root@test102 ~]# ./test.sh 
[root@test102 ~]# 
[root@test102 ~]# 
[root@test102 ~]# cat /home/test1 
test1
test1
[root@test102 ~]# 

解决方法3——转码后上传:

后来在notepad++里面找了一下,发现用notepad++编辑的话,编辑完了之后检查一下格式,转成UNIX格式之后保存,上传到服务器运行就好啦。
执行shell脚本报/bin/bash^M: bad interpreter错误的解决,问题集,Linux,bash,开发语言,shell,编码格式文章来源地址https://www.toymoban.com/news/detail-783504.html

到了这里,关于执行shell脚本报/bin/bash^M: bad interpreter错误的解决的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 执行docker- compose命令遇到-bash: /usr/local/bin/docker-compose: 无法执行二进制文件 问题的一种解决方法

    执行docker- compose命令遇到-bash: /usr/local/bin/docker-compose: 无法执行二进制文件 问题的一种解决方法

    一、问题描述 当安装好docker-compose并添加执行权限后,执行命令docker-compose 相关命令时出现 -bash: /usr/local/bin/docker-compose: 无法执行二进制文件 二、解决思路 应该是安装包有问题,网上找了几种重新安装方法途径,还是会出现这个问题,最终找到一种可靠重新安装的解决方法

    2024年02月08日
    浏览(17)
  • 解决在windows下编写shell脚本执行报错的问题

    有时候,我们为了方便,于是在windows下编写shell脚本,编写完成以后放到Linux开发环境中去执行,在执行的时候报如下的错: bash: ./test.sh: /bin/bash^M: bad interpreter: No such file or directory 两种解决方法: 方法一 第一步:使用下述命令看看该文件的格式,dos格式的文件行尾为^M$,

    2024年02月15日
    浏览(10)
  • 【麒麟V10系统x86环境--bash: ./install:/bin/bash:解释器错误: 权限不够】
  • linux报错 /bin/bash^M:解释器错误:没有那个文件或目录

    linux报错 /bin/bash^M:解释器错误:没有那个文件或目录

      在Linux中运行脚本时,会出现linux报错 /bin/bash^M:解释器错误:没有那个文件或目录。这是因为我们将在Windows下编写的脚本拷贝到Linux环境中运行时会出现运行不了的情况。主要还是Windows的换行符为rn,而Linux环境中的换行符号为n。   解决方法有:   方法一:   方法

    2024年02月13日
    浏览(47)
  • BASH shell脚本篇4——函数

    BASH shell脚本篇4——函数

     这篇文章介绍下BASH shell中的函数。之前有介绍过shell的其它命令,请参考: BASH shell脚本篇1——基本命令 BASH shell脚本篇2——条件命令 BASH shell脚本篇3——字符串处理 函数是代码重用的最重要方式。Bash函数可以定义为一组命令,在bash脚本中多次调用。bash函数使脚本更具可

    2024年02月07日
    浏览(13)
  • 【已解决】Linux下执行Shell脚本出现$‘\r‘: command not found

    【已解决】Linux下执行Shell脚本出现$‘\r‘: command not found

    今天把 Windows 的项目导入 linux 运行,执行 shell 脚本的时候,报错了,报错如下: 是 Windows 和 Linux 的 .sh 脚本文件格式不同,如果在脚本中有空行,脚本是在 Windows 下进行编辑之后上传到 linux 上去执行的话,就会出现这个问题。 windows 下的换行符是rn,而 linux 下的换行符是

    2024年01月16日
    浏览(12)
  • BASH shell脚本篇5——文件处理

    BASH shell脚本篇5——文件处理

     这篇文章介绍下BASH shell中的文件处理。之前有介绍过shell的其它命令,请参考: BASH shell脚本篇1——基本命令 BASH shell脚本篇2——条件命令 BASH shell脚本篇3——字符串处理 BASH shell脚本篇4——函数 在Bash Shell脚本中,可以使用多种方法来对文件进行操作,包括读取文件或写

    2024年02月07日
    浏览(8)
  • BASH shell脚本篇2——条件命令

    BASH shell脚本篇2——条件命令

    这篇文章介绍下BASH shell中的条件相关的命令,包括:if, case, while, until, for, break, continue。之前有介绍过shell的其它基本命令,请参考:BASH shell脚本篇1——基本命令 1. If语句 if 语句用于在顺序执行语句的流程中执行条件任务。 If 语句通常用于在Bash脚本中做出决定。它们根据

    2024年02月07日
    浏览(11)
  • Linux 报错 bash: /usr/bin/pip: 解释器错误:没有那个文件或目录

    Linux 报错 bash: /usr/bin/pip: 解释器错误:没有那个文件或目录

            今天在linux安装python库时,使用conda安装太慢,换了镜像源也没用,于是使用pip安装出现了解释器错误:没有那个文件或目录的问题,记录一下,或许对你有帮助。                 进入home/你的用户名/anaconda3/envs/虚拟环境名字/bin/pip,不能直接用cd进去,可以使用na

    2024年01月18日
    浏览(80)
  • Linux Bash Shell 脚本入门(2)——GNU

    ​ 目录 Linux Bash Shell 脚本入门(2)——GNU GNU与Linux GNU GNU的组成 Shell GNOME桌面环境 X Window 软件 GNOME 可点击内容,大部分来自维基百科,可以点击了解详情。 GNU操作系统起源于GNU计划,由理查德·斯托曼在麻省理工学院人工智能实验室发起,希望发展出一套完整的开放源代码

    2024年02月19日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包