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

无法执行 .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

答案1

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

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

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

^M是一个回车符. Linux 使用换行符来标记行尾,而 Windows 使用两个字符序列 CR LF。您的文件有 Windows 行尾,这会让 Linux 感到困惑。

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

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

答案2

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

答案3

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

额外的碳排放控制字符显示的编码与^M输出中的编码相同。运行 时也可以看到它cat -A create_mgw_3shelf_6xIPNI1P.sh

要将行尾从 DOS/Windows 样式转换为 Unix 样式,有一个名为 的工具dos2unix。您可以使用以下命令安装它:

sudo apt-get install dos2unix

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

dos2unix FILENAME
unix2dos FILENAME

对于您来说,只需运行下面这个命令,脚本文件就会被就地转换:

dos2unix create_mgw_3shelf_6xIPNI1P.sh

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

答案4

正如其他答案中所述,这是一个格式问题。因此,答案是将格式从 DOS 更改为 Unix 样式的行尾。这是另一种“就地”修复文件的简单方法

fromdos file

其包装如下tofrodos

sudo apt-get install tofrodos

相关内容