无法执行.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
是回车符 。 Linux使用换行符来标记行的结尾,而Windows使用双字符序列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系统上,只有LF控制字符用作换行符。
附加的CR控制字符在输出中显示为^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应该能够正确解释文件。
如其他答案中所述,这是格式问题。 所以,答案是将格式从DOS更改为Unix样式行结尾。 这是另一种简单的方法来“修复”文件
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
一切都很好