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

来源:互联网 发布:组策略映射网络驱动器 编辑:程序博客网 时间:2024/05/22 17:33

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

浏览量:2135次  发布时间:2013/12/9 13:03:01 查看评论
分享收藏吧:
关注我们:
<iframe id="iframe815730_0" src="http://pos.baidu.com/gcmm?rtbid=2053054&amp;rdid=9223372032564482828&amp;dc=2&amp;di=815730&amp;dri=0&amp;dis=0&amp;dai=3&amp;ps=492x1180&amp;dcb=BAIDU_SSP_define&amp;dtm=HTML_POST&amp;dvi=0.0&amp;dci=-1&amp;dpt=none&amp;tsr=0&amp;tpr=1469104061199&amp;ti=%2Fbin%2Fbash%5EM%3A%20%E5%9D%8F%E7%9A%84%E8%A7%A3%E9%87%8A%E5%99%A8%3A%20%E6%B2%A1%E6%9C%89%E9%82%A3%E4%B8%AA%E6%96%87%E4%BB%B6%E6%88%96%E7%9B%AE%E5%BD%95%20-%20%E5%88%9Be%E6%B5%8B%E8%AF%84%20-%20%E6%B5%8B%E8%AF%84%E7%BD%91&amp;ari=2&amp;dbv=2&amp;drs=1&amp;pcs=1920x979&amp;pss=1920x534&amp;cfv=0&amp;cpl=6&amp;chi=1&amp;cce=true&amp;cec=GBK&amp;tlm=1427316426&amp;rw=979&amp;ltu=http%3A%2F%2Fwww.7edown.com%2Fedu%2Farticle%2Fsoft_6021_1.html&amp;ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3D3DwW66qu9N8zjKqvXDLiS2NJJeXw47mD9UkR3Ohfrvj8KrZ3jeydulT4pESbC4rylrEHLnQSb_haQZTHOeoaaq%26wd%3D%26eqid%3Def7731cf0000ac2a000000035790bfb3&amp;lcr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3D3DwW66qu9N8zjKqvXDLiS2NJJeXw47mD9UkR3Ohfrvj8KrZ3jeydulT4pESbC4rylrEHLnQSb_haQZTHOeoaaq%26wd%3D%26eqid%3Def7731cf0000ac2a000000035790bfb3&amp;ecd=1&amp;psr=1920x1080&amp;par=1920x1040&amp;pis=-1x-1&amp;ccd=24&amp;cja=false&amp;cmi=8&amp;col=zh-CN&amp;cdo=-1&amp;tcn=1469104061&amp;qn=4795d9942b1e5400&amp;tt=1469104061142.177.195.196" width="300" height="250" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true" style="border-width: 0px; border-style: initial; vertical-align: bottom; margin: 0px;"></iframe>
编写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结束的字符换成空白

 

 

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

0 0