2016-09-26 1 views
1

Если у меня есть двоичный файл со следующим содержимым:Команда TYPE останавливается на 0x1A, за исключением случаев, когда она отправляется в 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?

+0

Помните, что 'more' изменяет символы табулятора, он изменяет их на последовательности символов Space; см. также его ['/Tn'](http://ss64.com/nt/more.html) вариант ... – aschipfl

+0

Просто мысль - поскольку вывод в виде канала поступает в файл под названием' something. $$$ '. Больше получает блок-устройство - файл. –

ответ

3

type команда проверяет внутренне, где вывод будет отправлен.

Если выходной поток консоль, входной буфер проверяется на наличие Ctrl-Z (0x1A характера), который обрабатывается как 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

У меня есть ужасное ощущение, что, кстати, существует ограничение на 32 КБ для TYPE или MORE. Или, может быть, 32 000 строк. Не помню, но следи. –

Смежные вопросы