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相关推荐

  1. windows 批处理脚本编写

    windows 批处理脚本编写 什么是批处理 批处理(Batch),也称为批处理脚本.顾名思义,批处理就是对某对象进行批量的处理.批处理文件的扩展名为bat. 目前比较常见 的批处理包含两类:DOS批 ...

  2. Notepad++编写的Verilog文件导入Vivado,中文注释乱码问题

    关于Notepad++编写的Verilog文件导入Vivado,中文注释乱码问题的解决方法 在使用Notepad++新建Verilog文件,编写程序并加入中文注释,在Vivado工程下添加该文件,内置 ...

  3. Vivado篇(一)Notepad++编写的Verilog文件导入Vivado,中文注释乱码问题

    关于Notepad++编写的Verilog文件导入Vivado,中文注释乱码问题的解决方法 在使用Notepad++新建Verilog文件,编写程序并加入中文注释,在Vivado工程下添加该文件,内置 ...

  4. WINDOWS的SHELLCODE编写高级技巧

    WINDOWS的SHELLCODE编写高级技巧 unix等系统因为有用户概念,所以往往溢出是使用先得到普通帐号,然后登陆后用溢出 再加载一个SHELL的办法得到ROOT权限,其系统调用又方便,所以SH ...

  5. python编写的程序可以在任何平台中执行-在Windows平台上编写的Python程序无法在Unix平台运行。...

    [单选题]在中华人民共和国境内飞行的民用航空器必须具有: ( ) [单选题]属于发热激活物的是: [单选题]年满( )周岁可以独立实施民事法律行为视为完全民事行为能力人 [单选题]在DIC的原发病中, ...

  6. windows 平台shellcode编写

    0x00.介绍 比方说你手头上有一个IE或FlashPlayer现成的漏洞利用代码,但它只能够打开计算器calc.exe.但是这实际上并没有什么卵用,不是吗?你真正想要的是可以执行一些远程命令或实现其 ...

  7. java使用cmd编译中文时错误,解决Notepad++编写的Java程序在cmd窗口编译时中文注释报错问题...

    解决Notepad++编写的Java程序在cmd窗口编译时中文注释报错问题 解决Notepad++编写的Java程序在cmd窗口编译时中文注释报错问题 在刚开始学习Java的过程中,考虑到记事本应用没 ...

  8. python只能运行在windows平台上吗_在Windows平台上编写的Python程序无法在Unix平台运行。...

    问题:在Windows平台上编写的Python程序无法在Unix平台运行. 更多相关问题 Because plants cannot move or talk, most people believe ...

  9. python可以在多种平台运行、体现了_在Windows平台上编写的Python程序无法在Unix平台运行。...

    问题:在Windows平台上编写的Python程序无法在Unix平台运行. 更多相关问题 某船公司2003年2月,建造了两艘航行于武汉-南京的2000吨油船,双壳结构形式,至今使用良好,为公司创 肾病 ...

最新文章

  1. 【译】A Note On Charity Through Marginal Price Discrimination
  2. onvif 客户端发现
  3. Remove Middle Man
  4. postman安装与使用
  5. 大学生如何应聘高薪IT职位
  6. Python学习笔记3——条件语句及循环语句
  7. 据说百度的月饼最差劲!!
  8. linux双击启动脚本文件
  9. 他来了他来了,英伟达发布全新Hopper架构GPU“H100”4nm制程800亿晶体管
  10. vue构建pc端项目(ElementUI)、vue入门小应用
  11. dble配置mysql主从同步
  12. 舒亦梵:几条投资理念,决定你是否具有富人思维
  13. [2019HDU多校第一场][HDU 6578][A. Blank]
  14. 嵌入式:485 半双工通信延时
  15. python四级考试_四级英语考试如何准备呢?
  16. 【双剑合璧】Git和Github使用指南
  17. 阿里云二级域名解析教程
  18. DV通配符证书申请方式及特点
  19. 网新恒天外派道富电话面试
  20. win98系统只能进安全模式的解决方法

热门文章

  1. hibernate5.2.10.Final基本配置
  2. Python的ASCII, GB2312, Unicode , UTF-8区别
  3. 关于ibatis.net 和 Nhibernate的选择
  4. Android 笔记一
  5. DataFormatString格式化字符串的总结
  6. python 从入门到跑路
  7. Maven 项目创建 找不到web.xml
  8. 《罗辑思维》读书笔记及思维导图
  9. JavaScript:零星知识
  10. Codeforces Round #131 (Div. 2)------AB