2016-09-26 71 views
1

如果我有以下內容的二進制文件:TYPE命令停止在0x1A上,除了當管道更多時?

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> 

比上一個命令更能代表文件的實際內容。

不管1A字符是否存在,管道輸出到MORE的確切程度是什麼使得它打印出文件的整個ASCII表示?

+0

請注意'more'修改製表符字符,它會將它們更改爲空格字符序列;另請參見它的['/Tn'](http://ss64.com/nt/more.html)選項... – aschipfl

+0

只是一個想法 - 當管道輸出進入一個名爲'something。$$$'的文件。更多的是獲取塊設備 - 一個文件。 – 2016-09-26 22:19:56

回答

3

type命令在內部檢查輸出將在哪裏發送。

如果輸出流是控制檯,輸入緩衝器被檢查按Ctrl-Z0x1A字符)的存在下作爲EOF處理。

如果輸出流不是控制檯,則處理所有字符。這不僅發生在管道上,而且也發生在重定向上。

type file.bin | more 
type file.bin > con 
type file.bin > file.bin.out 

兩個重定向和管道type命令將處理所有的字符。

此行爲的0x1A字符也存在於copy命令中,但在這種情況下它也是documented

+0

我想我可以以某種方式記住'type'在EOF字符中也放棄了MS-DOS時代的文件;不知道爲什麼他們改變它雖然... – aschipfl

+2

@aschipfl,它似乎是[CP/M遺產](https://blogs.msdn.microsoft.com/oldnewthing/20040316-00/?p=40233) –

+1

順便提一下,我有一種可怕的感覺,認爲TYPE或者更大的32kB限制。或者可能是32,000行。不記得但要小心。 –