背景
ARM AT91SAM9263EK毕设项目终于做完了,同时也到了要告别大学生活最后一站的时候了,看着板子上闪烁的指示灯不免回忆起很多很多的事情。顺便清理下实验室的电脑方便留给师弟师妹用。编译和开发日志是通过脚本来清理:
1 2 3 4 5 6 |
#!/usr/bin/bash logs=`ls|grep log` for log in $logs do rm -fr $log done |
Windows下编辑好的脚本在Fedora上执行会报错:
1 2 3 |
[root@Hebut at91sam9263ek]$ sh clean.sh clean.sh:行4: 未预期的符号 `$'do\r'' 附近有语法错误 'lean.sh:行4: `do |
看着应该是包含了特殊字符导致的,通过cat -v clean.sh查看详细信息:
1 2 3 4 5 |
#!/usr/bin/bash^M logs=`ls|grep log`^M for log in $logs^M do^M ls -al $log^M |
可以看到每行结尾都多了一个^M标识,查询后发现是Windows和Linux系统换行符不同引起的,Windows格式文件的换行符为“\r\n”,而Unix&Linux文件的换行符为“\n”。可以在Linux环境下重写一份也可以通过dos2unix工具将Windows下的脚本文件转换为Linux下可用的脚本文件。
dos2unix简介
dos2unix软件包包括工具dos2unix 和 unix2dos,用于将纯文本文件在DOS或Mac格式与Unix格式之间相互转换。dos2unix命令其实就是将文件中的“\r\n”转换为“\n”,unix2dos与dos2unix相反,它是将Linux和Unix格式文件转换为Windows格式文件。
DOS/Windows的文本文件中,断行符是由两个字符共同表示的:回车符(CR)和换行符(LF)。Unix的文本文件中,换行符则由单个换行符(LF)表示。而Mac的文本文件则由单个回车符(CR,用于Mac OS X之前的系统)或单个换行符(LF,用于当下的新Mac OS)表示。除了断行符,Dos2unix还可以转换文件编码。一些DOS编码页可以被转换为Unix Latin-1,Windows Unicode(UTF-16)文件也可以被转换为Unix Unicode(UTF-8)文件。其中有几个注意事项:
- 二进制文件则会被自动跳过,除非指定了强制转换选项;
- 特殊文件,如目录和队列,会被自动跳过;
- 符号链接和其所指向的目标默认不会被转换,可以用选项来指定替换符号链接或者将输出写入到链接目标,需要注意的是Windows下不支持写入到符号链接的目标。
安装dos2unix
Fedora直接使用yum命令安装即可完成安装:
1 2 3 4 5 6 |
[root@Hebut at91sam9263ek]$ yum install dos2unix -y [root@Hebut at91sam9263ek]$ dos2unix --version dos2unix 6.0.3 (2013-01-25) With Unicode UTF-16 support. With native language support. LOCALEDIR: /usr/share/locale |
dos2unix转换文件
安装完成后直接执行转换命令即可将文件中的“\r\n”转换为“\n”:
1 2 3 4 5 6 7 8 9 |
[root@Hebut at91sam9263ek]$ dos2unix clean.sh dos2unix: converting file clean.sh to Unix format ... [root@Hebut at91sam9263ek]$ cat -v clean.sh #!/usr/bin/bash logs=`ls|grep log` for log in $logs do ls -al $log done |
参考文档
https://sourceforge.net/projects/dos2unix/
https://waterlan.home.xs4all.nl/dos2unix/zh_CN/man1/dos2unix.htm
文章评论(0)