-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
脚本指示必须由位于
/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格式。评论
这个为我做了,谢谢
–bunkerdive
15年8月6日在19:53
谢谢,为我工作@ortang
–mikoop
20年11月9日,1:19
#3 楼
您的文件具有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应该能够正确解释该文件。
评论
谢谢,dos2unix也可以通过brew用于macOS。
–穆罕默德·纳基布(Mohamed El-Nakib)
18-09-18在5:35
#4 楼
用Dos编辑问题!用vi打开文件
,然后用以下方法设置unix:
:set ff=unix
:wq
很好
#5 楼
请执行vi <your script>
。然后执行
:set list
;它将显示脚本中的任何特殊字符。然后替换字符:
:%s/^M//gc
[要键入^M
,请按Ctrl + v + m]评论
参见上面有关使用:fileformat的答案,IMHO比全局替换更适合处理此问题。另请参见stackoverflow.com/questions/14609779/…了解如何自动处理的想法
– qneill
17年8月11日在15:58
#6 楼
如其他答案所述,这是格式问题。因此,答案是将格式从DOS更改为Unix样式的行尾。这是在原处修复文件的另一种简单方法fromdos file
它在软件包
tofrodos
中可用:sudo apt-get install tofrodos
#7 楼
您还可以使用gedit删除不需要的字符。在“文件”菜单下,选择“另存为”,然后设置行尾类型为unix / Linux。
评论
为此+1,因为它有助于我处理MacOS的行尾。
– Bobble
2014年4月3日在11:52
评论
或安装并使用dos2unix程序。
– argentpepper
2013年6月6日22:56
谢谢你,到目前为止我发现的所有其他答案都没有帮助。这一个做到了!
–qodeninja
2014年6月9日23:39
不必是Windows,将脚本从OS X复制到Ubuntu后,我得到了类似的消息... dos2unix在这种情况下效果很好,而用'\ r'替换任何内容都会更糟,因为没有'\文件中的n个字符。
–迈克尔
16 Sep 14 '17:39
@Michael macOS使用\ n,因为它是Unix。该脚本可能来自较早的Mac OS版本?在这种情况下,您可以运行sed -i -e's / \ r $ / \ n /'script.sh。
– wjandrea
16/12/21在4:49
在gedit中将其打开,然后另存为,然后选择“行尾:Unix / Linux”
–马特蒙
17年11月27日在12:11