详谈为何不要使用Windows的notepad编写shell
2019独角兽企业重金招聘Python工程师标准>>>
初学shell的时候,总听到群里的大牛说不要使用Windows自带的notepad编写shell。然而,一直不解其中的原因。接下来,咱们动手实践一下,了解其中的来龙去脉。
在Windows下,打开notepad,敲打以下代码:
#! /bin/bash
echo "This is the first line \
of the script."
echo "This is the second line \
of the script."
保存为test1。然后将这个文件复制到Linux下。打开这个文件,会看到文件的内容与之前在Windows下编辑的文本文件并无区别。
在Linux下,使用vi编辑test2文件,加入同样的内容,然后保存。
接下来,分别运行这两个文件(注意:运行前先赋予这两个文件以可执行权限)。对于test2,得到如下输出:
$ ./test2
This is the first line of the script.
This is the second line of the script.
对于test1,则得到这样的输出:
$ ./test1
bash: ./test1: /bin/bash^M: bad
interpreter: No such file or directory
也就是说,在Windows下用notepad编写的shell运行出错了。从报错信息可以看出,从header这一行就已经出错了,header这一行本来是要告诉我们的内核使用Bash这个命令解释器,它的路径位于/bin/bash。可是bash却告诉我们无此文件。究其原因,是^M这个字符影响了header一行对于命令解释器的正常识别。那^M这个字符又是什么呢?
不用的操作系统使用不同的字符来表示换行。Unix/Linux使用单个的换行(Line Feed,LF)符作为换行的标记。Windows/DOS使用2个字符:回车(Carriage Return,CR)符和换行符(LF)。MacOS使用CR。^M即为我们在使用Windows的notepad产生的回车符。更多信息可参见维基百科上关于Newline的解释:http://zh.wikipedia.org/wiki/%E6%8F%9B%E8%A1%8C
对于Linux Deepin甚至其他发行版本来说,一个比较通用的方法是使用tr工具来删除多余的回车符,因为它不需要安装额外的工具,且便于理解。
tr -d '\r' < test1 > tmp && mv tmp test2
使用这条命令删除多余的回车符后,该脚本即可正常运行。tr是translate或transliterate的缩写。tr工具从其标准输入(stdin)中转换、缩减或删除字符,并写道标准输出(stdout)。其基本句法为:
tr [options] set1 [set2]
在这里,tr从文件test1中读入,将其中的回车符(\r)删除后输出为文件tmp,然后又将文件tmp重命名为test2。对于tr的更多用法,可查看其man page。
转载于:https://my.oschina.net/ckanner/blog/91887
详谈为何不要使用Windows的notepad编写shell相关推荐
- windows 批处理脚本编写
windows 批处理脚本编写 什么是批处理 批处理(Batch),也称为批处理脚本.顾名思义,批处理就是对某对象进行批量的处理.批处理文件的扩展名为bat. 目前比较常见 的批处理包含两类:DOS批 ...
- Notepad++编写的Verilog文件导入Vivado,中文注释乱码问题
关于Notepad++编写的Verilog文件导入Vivado,中文注释乱码问题的解决方法 在使用Notepad++新建Verilog文件,编写程序并加入中文注释,在Vivado工程下添加该文件,内置 ...
- Vivado篇(一)Notepad++编写的Verilog文件导入Vivado,中文注释乱码问题
关于Notepad++编写的Verilog文件导入Vivado,中文注释乱码问题的解决方法 在使用Notepad++新建Verilog文件,编写程序并加入中文注释,在Vivado工程下添加该文件,内置 ...
- WINDOWS的SHELLCODE编写高级技巧
WINDOWS的SHELLCODE编写高级技巧 unix等系统因为有用户概念,所以往往溢出是使用先得到普通帐号,然后登陆后用溢出 再加载一个SHELL的办法得到ROOT权限,其系统调用又方便,所以SH ...
- python编写的程序可以在任何平台中执行-在Windows平台上编写的Python程序无法在Unix平台运行。...
[单选题]在中华人民共和国境内飞行的民用航空器必须具有: ( ) [单选题]属于发热激活物的是: [单选题]年满( )周岁可以独立实施民事法律行为视为完全民事行为能力人 [单选题]在DIC的原发病中, ...
- windows 平台shellcode编写
0x00.介绍 比方说你手头上有一个IE或FlashPlayer现成的漏洞利用代码,但它只能够打开计算器calc.exe.但是这实际上并没有什么卵用,不是吗?你真正想要的是可以执行一些远程命令或实现其 ...
- java使用cmd编译中文时错误,解决Notepad++编写的Java程序在cmd窗口编译时中文注释报错问题...
解决Notepad++编写的Java程序在cmd窗口编译时中文注释报错问题 解决Notepad++编写的Java程序在cmd窗口编译时中文注释报错问题 在刚开始学习Java的过程中,考虑到记事本应用没 ...
- python只能运行在windows平台上吗_在Windows平台上编写的Python程序无法在Unix平台运行。...
问题:在Windows平台上编写的Python程序无法在Unix平台运行. 更多相关问题 Because plants cannot move or talk, most people believe ...
- python可以在多种平台运行、体现了_在Windows平台上编写的Python程序无法在Unix平台运行。...
问题:在Windows平台上编写的Python程序无法在Unix平台运行. 更多相关问题 某船公司2003年2月,建造了两艘航行于武汉-南京的2000吨油船,双壳结构形式,至今使用良好,为公司创 肾病 ...
最新文章
- 【译】A Note On Charity Through Marginal Price Discrimination
- onvif 客户端发现
- Remove Middle Man
- postman安装与使用
- 大学生如何应聘高薪IT职位
- Python学习笔记3——条件语句及循环语句
- 据说百度的月饼最差劲!!
- linux双击启动脚本文件
- 他来了他来了,英伟达发布全新Hopper架构GPU“H100”4nm制程800亿晶体管
- vue构建pc端项目(ElementUI)、vue入门小应用
- dble配置mysql主从同步
- 舒亦梵:几条投资理念,决定你是否具有富人思维
- [2019HDU多校第一场][HDU 6578][A. Blank]
- 嵌入式:485 半双工通信延时
- python四级考试_四级英语考试如何准备呢?
- 【双剑合璧】Git和Github使用指南
- 阿里云二级域名解析教程
- DV通配符证书申请方式及特点
- 网新恒天外派道富电话面试
- win98系统只能进安全模式的解决方法
热门文章
- hibernate5.2.10.Final基本配置
- Python的ASCII, GB2312, Unicode , UTF-8区别
- 关于ibatis.net 和 Nhibernate的选择
- Android 笔记一
- DataFormatString格式化字符串的总结
- python 从入门到跑路
- Maven 项目创建 找不到web.xml
- 《罗辑思维》读书笔记及思维导图
- JavaScript:零星知识
- Codeforces Round #131 (Div. 2)------AB