linux解释器错误,无法执行.sh文件:/bin/bash^M:错误的解释器

问题描述

我想执行一个shell脚本:

-rwxr-x--x 1 root root 17234 Jun 6 18:31 create_mgw_3shelf_6xIPNI1P.sh

我试图做一个标准的程序,但我收到了这个错误:

./create_mgw_3shelf_6xIPNI1P.sh

localhost 389 -l /opt/fews/sessions/AMGWM19/log/2013-06-06-143637_CLA-0

DEBUG cd/etc/opt/ldapfiles/ldif_in ;

./create_mgw_3shelf_6xIPNI1P.sh

localhost 389 -l /opt/fews/sessions/AMGWM19/log/2013-06-06-143637_CLA-0

**ERROR sh: ./create_mgw_3shelf_6xIPNI1P.sh: /bin/bash^M: bad interpreter: No such file or directory**

这是什么意思?我这样做是作为root组下的root用户。

这是否意味着该文件没有root用户的正确权限?

最佳解决方案

这不是权限问题,您没有收到有关权限的消息

/bin/bash^M: bad interpreter: No such file or directory

该脚本表明它必须由位于/bin/bash^M的shell执行。没有这样的文件:它叫做/bin/bash。

^M是carriage return character。 Linux使用line feed character标记行的结尾,而Windows使用two-character序列CR LF。您的文件有Windows行结尾,这让Linux感到困惑。

删除虚假的CR字符。您可以使用以下命令执行此操作:

sed -i -e 's/\r$//' create_mgw_3shelf_6xIPNI1P.sh

次佳解决方案

在vim中,您还可以使用:set ff=unix然后保存文件,或者再次使用:set ff=dos来获取DOS格式。

第三种解决方案

您的文件具有DOS /Windows样式行结尾(CR LF),但在Unix-like系统上,只有LF控制字符用作换行符。

附加的CR控制字符在输出中显示为^M编码。运行cat -A create_mgw_3shelf_6xIPNI1P.sh时也可以看到它。

要将行结尾从DOS /Windows样式转换为Unix样式,有一个名为dos2unix的工具。你用它安装它:

sudo apt-get install dos2unix

然后,您可以使用两种方式简单地转换文件的行结尾

dos2unix FILENAME

unix2dos FILENAME

在您的情况下,只需在下面运行此命令,脚本文件将被转换为in-place:

dos2unix create_mgw_3shelf_6xIPNI1P.sh

之后,Bash应该能够正确解释文件。

第四种方案

如其他答案中所述,这是格式问题。所以,答案是将格式从DOS更改为Unix样式行结尾。这是修复文件’in place’的另一种简单方法

fromdos file

它包含在tofrodos包中:

sudo apt-get install tofrodos

第五种方案

做vi 。

然后:set list;它将显示脚本中的任何特殊字符。

然后替换角色:

:%s/^M//gc [^M型Ctrl + v + m]

第六种方案

您还可以使用gedit删除不需要的字符。在File菜单下,选择Save As并设置行结束类型unix /Linux。

第七种方案

问题是你用Dos编辑的!

用vi打开你的文件然后用以下命令设置unix:

:set ff=unix

:wq

一切都很好

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值