hexdump在Cygwin下将CRLF转换为LF

时间:2016-03-03 16:42:47

标签: cygwin line-endings

使用Cygwin / bash下的hexdump转储带有Windows行结尾(CRLF)的文本文件的内容时,hexdump似乎将文件作为文本文件打开并从Windows转换行结尾(CRLF)到UNIX(LF),这使得转储不正确。

我正在Windows 7上运行的Cygwin x86_64下运行bash 4.3.42:

mgd@mgd-win7vm /cygdrive/c/tmp
$ bash --version
GNU bash, version 4.3.42(4)-release (x86_64-unknown-cygwin)
...snip...

C:作为“文字”安装在/cygdrive/c上:

mgd@mgd-win7vm /cygdrive/c/tmp
$ mount
C:/cygwin/bin on /usr/bin type ntfs (binary,auto)
C:/cygwin/lib on /usr/lib type ntfs (binary,auto)
C:/cygwin on / type ntfs (binary,auto)
C: on /cygdrive/c type ntfs (text,posix=0,user,noumount,auto)

现在,我们创建一个包含一行的文本文件:

mgd@mgd-win7vm /cygdrive/c/tmp
$ echo "Hello" > textfile

文件长度为7个字节(“Hello”+ CR + LF):

mgd@mgd-win7vm /cygdrive/c/tmp
$ stat textfile
  File: 'textfile'
  Size: 7               Blocks: 1          IO Block: 65536  regular file
...snip...

当我们使用od转储它时,我们得到正确的输出:

mgd@mgd-win7vm /cygdrive/c/tmp
$ od -ctx1 textfile
0000000   H   e   l   l   o  \r  \n
         48  65  6c  6c  6f  0d  0a
0000007

但是,当使用hexdump CR + LF转换为LF时:

mgd@mgd-win7vm /cygdrive/c/tmp
$ hexdump -C textfile
00000000  48 65 6c 6c 6f 0a                                 |Hello.|
00000006

这是一个错误吗?

有没有办法强制hexdump以二进制模式打开文件?

0 个答案:

没有答案