发现今天有问题,无法将本地用editplus或txt编写的shell通过sftp传递给服务器运行,报告了错误。 我在谷歌上查了一下,发现原来win上的文本格式和linux上的不一样。 如果我们用win写文件,用dos2linux转换就可以运行了。
在centos上可以用yum安装。 命令如下,其他系统根据需要安装即可。 [ root @ xiaohuai~] # yum install dos2unix-y
用途说明
DOS2unix命令用于将dos格式的文本文件转换为UNIX格式(dos/mactounixtextfileformatconverter )。 DOS下的文本文件将rn作为换行标志,如果用十六进制表示,则为0D 0A。 Unix下的文档将n作为换行标记,如果用十六进制表示,则为0A。 DOS格式的文本文件位于Linux下,在较低版本的vi中打开时,行尾会显示^M。 此外,对于shell脚本,许多命令无法成功处理这种格式的文件。 Unix格式的文本文件在Windows上用Notepad打开时会一起显示。 因此,需要将两种格式的文件相互转换,这些文件对应于将UNIX格式的文本文件转换为DOS格式的unix2dos命令。
一般参数
将DOS格式文本文件转换为Unix格式的最简单用法是dos2unix直接赶上文件名。
格式: dos2UNIX文件
如果要一次转换多个文件,请将这些文件名直接附加在dos2unix之后。 (注:带有或不带有-o参数都有相同的效果)
格式: dos2unix文件1文件2文件3
格式: dos2unix-o文件1文件2文件3
上述内容将在转换时直接在原始文件中修改。 如果您想将转换结果保存到其他文件,但源文件保持不变,则可以使用-n参数。
格式: dos2unix old文件新文件
如果不更改文件的时间戳,请添加-k参数。 因此,这些命令可以添加-k参数以保留文件的时间戳。
格式: dos2unix-k文件
格式: dos2unix-k文件1文件2文件3
格式: dos2unix-k-o文件1文件2文件3
格式: dos2unix-k-n old文件新文件
注: unix2dos命令的使用方法与dos2unix命令类似。
使用案例
示例DOS格式文本文件在Linux上的表示形式
当前有一个在Linux上用vi编辑的脚本文件job.sh。 [root@xiaohuai ~]# cat job.sh
#! /简单的乌冬面/sh
date job.txt
将其转换为DOS格式的文本文件。 [ root @ Xiao Huai~] # unix2dos job.sh
unix2dos : convertingfilejob.shtodosformat .
请试着执行一下。 [root@xiaohuai ~]# ./job.sh
-bash:/job.sh:权限不足
[root@xiaohuai ~]# chmod x job.sh
[root@xiaohuai ~]# ./job.sh
-bash:/job.sh: /简单面条/sh^M: bad interpreter:中没有该文件或目录
对于DOS格式的脚本文件,无法解释执行。 由于脚本文件的第一行用于指定解释器,因此在Linux系统上认为解释器是/简单的面条/sh^M而不是/简单的面条/sh。
让我们用Linux下的几个命令来看看DOS格式文件的真实身份。 [ root @ xiaohuai~] # cat-vjob.sh==cat-v可以看到文件中的非打印字符,但不能使用没有-v参数的cat命令。 #! /简单的面条/sh^M ^M date job.txt^M
^M
[ root @ xiaohuai~] # hex dump-cjob.sh==hex dump-c可以看到文件中每个字节的十六进制表示形式。 00000000023212 f 6269 e 2f 73680 d 0a 0d 0a 646174|#! /简单的面条/sh . dat|000001065203 E6 a6 f 622 e 7478740 d 0a 0d 0a|ejob.txt . |
0000001e
用[root@xiaohuai ~]# vi job.sh==打开时,在下面可以看到格式为[dos]的提示。 有些版本vi显示行尾为^M。 #! /简单的面条/sh date job.txt
~
~
' job.sh' [dos ] 4L,30C
将DOS格式恢复为Unix格式,看看效果如何。 root@xiaohuai ~]# dos2unix job.sh
dos2unix : convertingfilejob.shtounixformat .
[root@xiaohuai ~]# ./job.sh
可以执行。 不再报告“-bash:/job.sh: /简单面条/sh^M: bad interpreter:中没有该文件或目录”的错误。
[根@小湖~ ] #
示例dos2unix -k和dos2unix -n使用案例[root@xiaohuai ~]# cat 1.txt
1
2
3
欧洲足球锦标赛
[root@xiaohuai ~]# file 1.txt
1.txt : ascii文本
[root@xiaohuai ~]# ls -l 1.txt
-rw-r----r----1根路由611-14093360081.txt
[root@xiaohuai ~]# date
2010年11月14日星期日09:28:42 CST
[ root @ xiaohuai~] # unix2dos-k1.txt==保留文件的时间戳
unix2dos :转换文件1.txt todos格式.
[root@xiaohuai ~]# ls -l 1.txt
-rw-r----r----1根路由911-14093360081.txt
[ root @ xiaohuai~] # dos2unix-n1.txt2. txt==1. txt转换为2.txt
dos2unix :转换文件1.txtto file2. txtinunixformat .
[ root @ xiaohuai~] # ls-L1.txt2. txt
-rw-r----r----1根路由911-14093360081.txt
-rw-r----r----1根路由611-14093360302.txt
[ root @ xiaohuai~] # file1. txt2. txt
1.txt : ascii文本,with CRLF line terminators
2.txt : ascii文本
[root@xiaohuai ~]# cat -v 1.txt
1^M
2^M
3^M
[root@xiaohuai ~]# cat -v 2.txt
1
2
3
[根@小湖~ ] #