Почему передача двоичного текста на экран часто приводит к появлению терминала? - PullRequest
5 голосов
/ 12 апреля 2010

Воображаемая ситуация: Вы использовали mysqldump для создания резервной копии базы данных mysql. В этой базе данных есть столбцы, которые являются BLOB-объектами. Это означает, что ваши «текстовые» файлы дампа содержат как строки, так и двоичные данные (двоичные данные хранятся в виде строк?)

Если вы выводите этот файл на экран

$ cat dump.mysql

вы часто будете получать неожиданные результаты. Терминал начнет подавать звуковые сигналы, а затем при завершении прокрутки выходных данных на вашем терминале часто будут вводиться разделы мусора, как если бы вы их вводили, а иногда ваши приглашения и все, что вы вводите, будут символами мусора.

Почему это происходит? Другими словами, я думаю, что я ищу обзор того, что на самом деле происходит, когда вы сохраняете двоичные строки в файле, и когда вы котируете эти файлы, и когда результаты кота сообщаются в терминал, и любые другие шаги Я скучаю.

Ответы [ 3 ]

6 голосов
/ 12 апреля 2010

Когда вы загружаете двоичный файл, вы можете непреднамеренно отправить управляющие символы на терминал.

Если терминальное приложение хочет, например, отправить звуковой сигнал, оно отправляет на терминал следующий двоичный файл: 0x007 (только SYS V).

То же самое относится к цветам, положению курсора и др.

5 голосов
/ 12 апреля 2010

Начните здесь: http://www.faqs.org/docs/Linux-HOWTO/Keyboard-and-Console-HOWTO.html

В частности, разделы 3 (общие сведения о консоли) и раздел 4 (перезагрузка терминала).

Это охватывает немного больше, чем вы говорите, но должно дать вам то, что вам нужно.

2 голосов
/ 12 апреля 2010

Когда вы выводите двоичные данные на экран, терминал пытается интерпретировать эти двоичные данные в ASCII (или UTF). Некоторые персонажи способны управлять терминалом. Например,

echo "^[[0;31;40m" # The first ^[ comes from pressing Ctrl+v, Esc

Превратит фон в черный, а передний план в красный. Используйте reset, чтобы вернуть терминал в нормальное состояние.

...