linux /bin/bash^m: bad interpreter,51CTO博客-专业IT技术博客创作平台-技术成就梦想

问题描述:

在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看到的换行符是^M$,但是在替换换行符的时候不能用 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的格式:

5abffeb4d37069e81c9316131d031cf2.png

d60721a1f4454075c77c68b8be2fd19d.png

然后用命令:set ff=unix修改:

f42e2181854d31481be3b4560d386430.png

修改之后格式变成了unix:

1d202746adfe2d138eece924b6a2edbb.png

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

[root@test102 ~]# ./test.sh

[root@test102 ~]#

[root@test102 ~]#

[root@test102 ~]# cat /home/test1

test1

test1

[root@test102 ~]#

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

后来在notepad++里面找了一下,发现用notepad++编辑的话,编辑完了之后检查一下格式,转成UNIX格式之后保存,上传到服务器运行就好啦。

7ce3be0b4c2f6c7c914117337b10243d.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值