Не зная внутреннего устройства различных приложений, вы не можете сказать, какие символы были отображены драйвером терминала (от имени приложения )и какие были выведены данным приложением.
Я используюscript
для захвата вывода для команды -строки приложений, подобных вашему примеру, а затем использую сценарий для фильтрации escape-последовательностей (см., например,Can Я программно «записываю» управляющие коды ANSI в файл с помощью утилит unix?).
Это не будет работать для полноэкранных -приложений, таких как редактор (, потому что не может четко показать, что происходит, когда курсор перемещается по экрану, обновляя текст ). Для этого (обычно )достаточно хорошо воспроизвести сеанс в замедленном режиме (, например,slowcat
).
Это вызвано не поведением dd, а поведением операционной системы. Тем не менее, это поведение , указанное posix .
The value returned may be less than nbyte if the number of bytes left in the file is less than nbyte, if the read() request was interrupted by a signal, or if the file is a pipe or FIFO or special file and has fewer than nbyte bytes immediately available for reading. For example, a read() from a file associated with a terminal may return one typed line of data.
Когда вы устанавливаете bs=4
, вы указываете dd
читать 4 байта за раз, но это означает, что он запрашивает только 4 байта на read()
. Из ОС возвращает меньше, dd
не вернется и read()
второй раз, если только...
Существует iflag=fullblock
, который предписывает dd
выполнить несколько read()
операций для чтения всего блока.