Экранная команда os x,'.screenrc', termcap
Мне нужна помощь в концептуальной области, окружающей:
- / USR / бен / экран,
- ~ /.Screenrc,
- TERMCAP
Моя цель: создать "правильно" отформатированный файл журнала через "экран".
Симптом: в файле журнала содержатся сотни байтов возврата каретки [т.е. (\015) или (\r) ]. Я хотел бы заменить каждый байт возврата каретки байтом перевода строки [т.е. (\012) или (\n)].
Мой подход: я создал файл: ~/.screenrc и добавил к нему строку 'termcap' с надеждой перехватить входящие байты и преобразовать байты возврата каретки в байты перевода строки ДО того, как они будут записаны в файл журнала. Я перебрал девять различных синтаксических форм моего запроса. Ни один из них не имел желаемого эффекта (см. Ниже для всех девяти форм).
Мои вопросы:
- Может ли моя цель быть достигнута с моим подходом?
- Если да, какие изменения мне нужно сделать, чтобы достичь своей цели?
- Если нет, какую альтернативу я должен реализовать?
- Нужно ли смешивать в команде 'stty'?
- Если да, то как?
Примечание: я могу создать "правильно" отформатированный файл, используя файл журнала в качестве входных данных для "tr":
$ /usr/bin/tr '\015' '\012' <screenlog.0 | head
<5 BAUD ADDRESS: FF>
<WAITING FOR 5 BAUD INIT>
<5 BAUD ADDRESS: 33>
<5 BAUD INIT: OK>
Rx: C233F1 01 00 @ 254742 ms
Tx: 86F110 41 00 BE 1B 30 13 @ 254753 ms
Tx: 86F118 41 00 88 18 00 10 @ 254792 ms
Tx: 86F128 41 00 80 08 00 10 @ 254831 ms
Rx: C133F0 3E @ 255897 ms
Tx: 81F010 7E @ 255903 ms
$
Файл журнала 'screen' ( ~/screenlog.0) создается с помощью следующей команды:
$ screen -L /dev/tty.usbserial-000014FA 115200
где:
$ ls -dl /dev/*usb*
crw-rw-rw- 1 root wheel 17, 25 Jul 21 19:50 /dev/cu.usbserial-000014FA
crw-rw-rw- 1 root wheel 17, 24 Jul 21 19:50 /dev/tty.usbserial-000014FA
$
$
$ ls -dl ~/.screenrc
-rw-r--r-- 1 scottsmith staff 684 Jul 22 12:28 /Users/scottsmith/.screenrc
$ cat ~ /.screenrc
#termcap xterm* 'XC=B%,\015\012' # 01 no effect
#termcap xterm* 'XC=B%\E(B,\015\012' # 02 no effect
#termcap xterm* 'XC=B\E(%\E(B,\015\012' # 03 no effect
#terminfo xterm* 'XC=B%,\015\012' # 04 no effect
#terminfo xterm* 'XC=B%\E(B,\015\012' # 05 no effect
#terminfo xterm* 'XC=B\E(%\E(B,\015\012' # 06 no effect
#termcapinfo xterm* 'XC=B%,\015\012' # 07 no effect
#termcapinfo xterm* 'XC=B%\E(B,\015\012' # 08 no effect
termcapinfo xterm* 'XC=B\E(%\E(B,\015\012' # 09 no effect
$
$ echo $TERM
xterm-256color
$ echo $SCREENRC
$ ls -dl /usr/lib/terminfo/?/*
ls: /usr/lib/terminfo/?/*: No such file or directory
$ ls -dl /usr/lib/terminfo/*
ls: /usr/lib/terminfo/*: No such file or directory
$ ls -dl /etc/termcap
ls: /etc/termcap: No such file or directory
$ ls -dl /usr/local/etc/screenrc
ls: /usr/local/etc/screenrc: No such file or directory
$
система:
- MacBook Pro (17 дюймов, середина 2010 г.)
- Процессор 2,53 ГГц Intel Core i5
- Память 8 ГБ 1067 МГц DDR3
- Графика NVIDIA GeForce GT 330M 512 МБ
- OS X Yosemite Версия 10.10.4
Экран (1) Страница руководства Mac OS X: (возможный соответствующий контент):
ПЕРЕВОД ХАРАКТЕРА
Screen имеет мощный механизм для перевода символов в произвольные строки в зависимости от текущего шрифта и типа терминала. Используйте эту функцию, если вы хотите работать с общим стандартным набором символов (скажем, ISO8851-latin1) даже на терминалах, которые разбрасывают более необычные символы на нескольких страницах шрифтов на национальном языке.
Syntax: XC=<charset-mapping>{,,<charset-mapping>}
<charset-mapping> := <designator><template>{,<mapping>}
<mapping> := <char-to-be-mapped><template-arg>
Вещи в фигурных скобках могут повторяться любое количество раз. Экран A рассказывает, как сопоставить символы в шрифте ("B": Ascii, "A": UK, "K": немецкий и т. Д.) Со строками. Каждый описывает, в какую строку будет переведен один символ. Используется шаблонный механизм, так как в большинстве случаев коды имеют много общего (например, строки для переключения на другую кодировку и от нее). Каждое вхождение '%' в заменяется указанным вместе с символом. Если ваши строки совсем не похожи, то используйте "%" в качестве шаблона и поместите полную строку в. Был добавлен механизм цитирования, чтобы можно было использовать настоящий "%". Символ "\" заключает в кавычки специальные символы "\", "%" и ",". Вот пример: termcap hp700 'XC=B\E(K%\E(B,\304[,\326\\,\334]') Этот экран показывает, как перевести ISOlatin1 (кодировку 'B') в верхний регистр umlaut символы на терминале hp700, который имеет немецкую кодировку. '\304' преобразуется в '\E(K[\E(B' и т. д.). Обратите внимание, что эта строка анализируется три раза до построения внутренней справочной таблицы, поэтому для создания единственного символа "\" необходимо много цитат. Еще одно расширение было добавлено для большей эмуляции: если отображение переводит символ "%" без кавычек, он будет отправляться на терминал всякий раз, когда экран переключается на соответствующий. в особом случае предполагается, что шаблон является просто "%", потому что последовательность переключателей charset и сопоставления символов обычно имеют мало общего. В этом примере показано одно использование расширения: termcap xterm 'XC=K%,%\E(B,[\304,\\\326,]\334'Здесь часть немецкой ('K') кодировки эмулируется на xterm. Если экран должен измениться на кодировку' K ', '\E(B'будет отправлено на терминал, то есть кодировку ASCII я используется вместо Шаблон представляет собой просто "%", поэтому сопоставление простое: "[" в "\ 304", "\" в "\ 326" и "]" в "\ 334".
1 ответ
Раздел о переводе символов описывает функцию, которая не связана с ведением журнала. Это говорит screen
как использовать управляющие последовательности ISO-2022 для печати специальных символов на терминале. В примере страницы руководства
termcap xterm 'XC=K%,%\E(B,[\304,\\\\\326,]\334'
это говорит screen
послать escape(B (притвориться, что он переключает терминал на набор символов "K"), когда ему нужно напечатать любой из [, \ или ]. От руки (ссылаясь на последовательности управления XTerm), рассуждения в примере кажутся неясными:
- xterm обрабатывает набор символов "K" (немецкий)
- набор символов "B" - US-ASCII
- Предполагая, что набор символов "B" фактически отображается как ISO-8859-1, эти три символа - Ä, Ö и Ü (что является правдоподобным использованием немецкого языка для печати некоторых распространенных умлаутов).
Вместо того, чтобы обрабатываться этой функцией, screen
В логах ожидается запись оригинальных символов, отправленных на терминал - до перевода.