/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, 搞定了。
杯具的事也来了,当我们在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, 搞定了。
相关文章推荐
- Powershell获取并导出指定日期EventLog
- bashd的基本特性及文本操作命令
- shell中的特殊符号
- webshell
- Shell脚本编程(3)
- shell脚本注释模版
- Shell需注意的语法问题
- Shell循环输入符合条件为止
- 通过shell脚本进行数据库操作
- Shell命令部分缩写由来
- bash编程之 ~制作Mini Linux系统~
- 公告:请访问我Blog新站——酷壳 CoolShell.cn
- 工作随笔——xshell4安装后应该做的一些事
- 8个实用而有趣Bash命令提示行
- 编程实现linux下的shell
- Ubuntu&Mac下使用alias简化日常操作
- Ubuntu&Mac下使用alias简化日常操作
- shell编程
- bash的基本特性详细讲解
- Bash Shell 基本特性