问题描述:
昨天运行一个脚本的时候出现报错情况,
解决过程:
问了前辈得知是在Windows下编辑的脚本,需要进行文件转换才能运行,并告诉我使用dos2unix命令进行转换。
通过网络查询得到如下的知识,积累下来。
1、Windows下编辑的shell脚本无法在linux下运行的原因:
DOS下的文本文件是以\r\n作为断行标志的,表示成十六进制就是0D 0A。而Unix下的文本文件是以\n作为断行标志的,表示成十六进制就是 0A。DOS格式的文本文件在Linux底下,用较低版本的vi打开时行尾会显示^M,而且很多命令都无法很好的处理这种格式的文件,如果是个shell脚本,。而Unix格式的文本文件在Windows下用Notepad打开时会拼在一起显示。
2、dos2unix作用
dos2unix命令用来将DOS格式的文本文件转换成UNIX格式的(DOS/MAC to UNIX text file format converter)
3、命令的help信息
-h --help give this help
-k --keepdate keep output file date
-q --quiet quiet mode, suppress all warnings
always on in stdin->stdout mode
-V --version display version number
-c --convmode conversion mode
convmode ASCII, 7bit, ISO, Mac, default to ASCII
-l --newline add additional newline in all but Mac convmode
-o --oldfile write to old file
file ... files to convert in old file mode
-n --newfile write to new file
infile original file in new file mode
outfile output file in new file mode
4、使用
命令格式:dos2unix file
5、常用参数
-n 保存为新文件 格式: dos2unix -n oldfile newfile
-k 保持文件时间戳不变 格式: dos2unix -k file
6、使用实例
dos格式文件:
[[email protected] newtest]# cat test.sh
#!/bin/sh
date >job.txt
[[email protected] newtest]# sh test.sh
: command not found
: command not found
使用dos2unix转换后
[[email protected] newtest]# dos2unix test.sh
dos2unix: converting file test.sh to UNIX format ...
[[email protected] newtest]# sh test.sh
[[email protected] newtest]# ls
job.txt job.txt? test.sh xuguanyu
[[email protected] newtest]# cat job.txt
Tue Sep 22 11:20:17 EDT 2015