知识屋:更实用的电脑技术知识网站
所在位置:首页 > 操作系统 > linux

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

发布时间:2014-09-05 13:39:49作者:知识屋

/bin/bash^M: 坏的解释器: 没有那个文件或目录
 
编写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结束的字符换成空白
 
 
现在再运行就没这个问题了。
(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜