您的位置:首页 > 运维架构 > Shell

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

2016-07-29 10:09 609 查看
编写shell脚本时,我们经常习惯在windows下写好,然后通过共享目录拷到linux下,方便快捷。

杯具的事也来了,当我们在windows写一个shell程序拷到linux中,修改好权限,正准备试下效果时,

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

什么情况?

这跟系统有关。脚本文件在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$

# 2016-7-29^M$

^M$

#eaxmple:sh scanner.sh 192.168.1.1^M$

^M$

^M$

^M$

network=$(echo $1 | cut -d. -f1-3)^M$

PS:cat -A 什么意思?

A就是all的意思,就是所有的都显示出现,也就是说\n\r默认是不显示的。

这时候只需要删除这个字符就可以了。

怎么删掉呢?

正则表达式sed -i 's/\r$//' filename

什么意思呢?

-i插入

s替代模式

\r$表示任何以\r结束的字符

整句意思是把以\r结束的字符换成空白

OK, 搞定了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: