为什么 dos2unix 默认情况下会中止转换带有特殊字符的文件?

为什么 dos2unix 默认情况下会中止转换带有特殊字符的文件?

手册页的dos2unix状态:

Binary files are automatically skipped, unless conversion is forced.

...

-f, --force
    Force conversion of binary files.

如果您在包含特殊符号(例如垂直制表符)的文件上运行dos2unix时没有该标志,则它将失败并显示以下消息:-f

dos2unix: Binary symbol found at line 123
dos2unix: Skipping binary file foo.csv

我的问题是,如果遇到带有特殊符号的文件,为什么默认行为会dos2unix假设用户犯了错误?是否只是出于谨慎考虑,用户可能会在真正的二进制文件上运行此文件并损坏它?

答案1

这样做是因为,虽然dos2unix知道文本文件中的两个字符0x0d0a是 DOS/Windows 用于行尾的字符,并且应该替换为0x0aUnix/Linux 行尾,但还不是很清楚对于“二进制”文件。

“二进制”文件可以是可执行文件、存档、数据库、来自某些未知程序的数据文件或前述文件的压缩版本。它们可能包含一对包含十进制值的数据字节,0x0d0a甚至是一条 CPU 指令。short int3338

只需在这些文件中替换0x0d0a为就会破坏它们(使它们不起作用)。0x0a

由于这通常是一个坏主意,dos2unix因此默认情况下不会这样做。

但是,由于 Unix 方式是假设人们知道自己在做什么(如果你愿意的话,搬起石头砸自己的脚),并且dos2unix在检测“二进制”方面并不完美,所以在出现误报的情况下可以进行覆盖。

答案2

为什么你会在二进制文件上运行它吗?随机希望每一个都0x0d0a应该是0x0a?它是为 ASCII 文本文件设计的;我不确定它是否能处理 Unicode。作为一种保护措施,它可以阻止您损坏二进制文件。

相关内容