TYPE 命令在 0x1A 上停止,除非通过管道传输到 MORE?
TYPE command stops on 0x1A, except when piped to MORE?
如果我有一个包含以下内容的二进制文件:
48 65 6C 6C 6F 1A 48 65 6C 6C 6F
然后当我 运行 对其执行 TYPE 命令时,它会在 1A
字符处停止读取:
C:\Temp>type file.bin
Hello
但是,当我再次 运行 TYPE 但这次将输出通过管道传递给 MORE 时,它会产生以下输出:
C:\Temp>type file.bin|more
Hello→Hello
C:\Temp>
这比前面的命令更能代表文件的实际内容。
管道输出到 MORE 的具体作用是什么使得它打印出文件的整个 ASCII 表示而不管是否存在 1A
字符?
type
命令在内部检查输出将发送到哪里。
如果输出流是控制台,则检查输入缓冲区是否存在作为 EOF 处理的 Ctrl-Z(0x1A
字符)。
如果输出流不是控制台,则处理所有字符。这不仅发生在管道上,也发生在重定向上。
type file.bin | more
type file.bin > con
type file.bin > file.bin.out
重定向和管道 type
命令都将处理所有字符。
0x1A
字符的这种行为也存在于 copy
命令中,但在这种情况下它也是 documented.
如果我有一个包含以下内容的二进制文件:
48 65 6C 6C 6F 1A 48 65 6C 6C 6F
然后当我 运行 对其执行 TYPE 命令时,它会在 1A
字符处停止读取:
C:\Temp>type file.bin
Hello
但是,当我再次 运行 TYPE 但这次将输出通过管道传递给 MORE 时,它会产生以下输出:
C:\Temp>type file.bin|more
Hello→Hello
C:\Temp>
这比前面的命令更能代表文件的实际内容。
管道输出到 MORE 的具体作用是什么使得它打印出文件的整个 ASCII 表示而不管是否存在 1A
字符?
type
命令在内部检查输出将发送到哪里。
如果输出流是控制台,则检查输入缓冲区是否存在作为 EOF 处理的 Ctrl-Z(0x1A
字符)。
如果输出流不是控制台,则处理所有字符。这不仅发生在管道上,也发生在重定向上。
type file.bin | more
type file.bin > con
type file.bin > file.bin.out
重定向和管道 type
命令都将处理所有字符。
0x1A
字符的这种行为也存在于 copy
命令中,但在这种情况下它也是 documented.