/bin/bash^M: 坏的解释器: 没有那个文件或目录

本文详细介绍了在将Windows编辑的Shell脚本拷贝到Linux环境中时遇到的问题,以及如何解决这一问题。通过使用cat-A命令查看文件格式,发现文件在Windows下编辑时每行末尾多出了一个 字符。为了使脚本在Linux环境下正确运行,需要使用sed-i命令删除这些多余的 字符。此外,文章还解释了cat-A命令的作用,以及如何使用sed-i命令进行替换。
摘要由CSDN通过智能技术生成
编写shell脚本时,我们经常习惯在windows下写好,然后通过共享目录拷到linux下,方便快捷。
杯具的事也来了,当我们在windows写一个shell程序拷到linux中,修改好权限,正准备试下效果时,
/bin/bash^M: 坏的解释器: 没有那个文件或目录
/bin/bash^M: <wbr>坏的解释器: <wbr>没有那个文件或目录

  什么情况?
这跟系统有关。脚本文件在windows下编辑过,windows下每一行的结尾是\n\r,而在linux下文件的结尾是\n,那么你在windows下编辑过的文件在linux下打开看的时候每一行的结尾就会多出来一个字符\r,
用cat -A filename时你可以看到这个\r字符被显示为^M
#!/bin/bash^M$
^M$
#Program:^M$
^M$
     ip scanner ^M$
^M$
#Author:^M$
^M$
     wangzhe^M$
^M$
#Time:^M$
^M$
     2012-9-1^M$
^M$
#eaxmple:sh scanner.sh 192.168.1.101^M$
^M$
^M$
^M$
network=$(echo $1 | cut -d. -f1-3)^M$
^M$
^M$
^M$
for i in $(seq 1 254)^M$
^M$
do^M$
^M$
       ping -c 1 -w 1 $network.$i > /dev/null ^M$
^M$
       if [ $? -eq 0 ]; then ^M$
^M$
                     arp $network.$i | grep ":" | awk '{print $1,$3}'         ^M$
^M$
                   echo "host $network.$i is up"^M$
^M$
       else ^M$
^M$
               echo "host $network.$i is down"^M$
^M$
fi^M$
^M$
done^M$
PS:cat -A 什么意思?
A就是all的意思,就是所有的都显示出现,也就是说\n\r默认是不显示的。
这时候只需要删除这个字符就可以了。
怎么删掉呢?
正则表达式sed -i 's/\r$//'filename
什么意思呢?
-i插入
s替代模式
\r$表示任何以\r结束的字符
整句意思是把以\r结束的字符换成空白

现在再运行就没这个问题了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值