os x screen命令,'。screenrc',termcap

时间:2015-07-23 04:33:50

标签: macos character-encoding termcap

我需要在概念领域提供帮助:

  • 的/ usr /斌/屏幕,
  • 〜/ .screenrc,
  • 的termcap

我的目标:是通过“屏幕”创建“正确”格式化的日志文件。

症状:日志文件包含数百个回车字节[即(\ 015)或(\ r \ n)]。我想用换行字节替换每个回车字节[即(\ 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  
   $  

使用以下命令创建“屏幕”日志文件(〜/ 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 GHz Intel Core i5
  • 内存8 GB 1067 MHz DDR3
  • 图形NVIDIA GeForce GT 330M 512 MB
  • OS X约塞米蒂版本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]' 这告诉屏幕如何在具有德语字符集的hp700终端上翻译ISOlatin1(charset'B')大写变音字符。 '\ 304'被转换为'\ E(K [\ E(B'等等。请注意,在构建内部查找表之前,此行会被解析三次次),因此需要大量引用需要创建单个'\'。 添加了另一个扩展以允许更多仿真:如果映射转换了未引用的'%'字符,则只要屏幕切换到相应的字符,它就会被发送到终端。在这种特殊情况下,假设模板只是'%',因为字符集切换序列和字符映射通常没有太多共同之处。 此示例显示了扩展的一种用法: termcap xterm'XC = K%,%\ E(B,[\ 304,\\\ 326,] \ 334' 这里,德语('K')字符集的一部分是在xterm上模拟的。如果屏幕必须更改为'K'字符集,'\ E(B'将被发送到终端,即使用ASCII字符集。模板只是'%',因此映射很简单:'[' ''304','\'到'\ 326','''到'\ 334'。

1 个答案:

答案 0 :(得分:0)

character translation部分描述了与日志记录无关的功能。它告诉screen如何使用ISO-2022控制序列在终端上打印特殊字符。在手册页的示例中

termcap xterm 'XC=K%,%\E(B,[\304,\\\\\326,]\334'

这告诉screen发送 escape B (假装它正在将终端切换到字符集“K” “)当它必须打印任何 [ \ ] 。Offhand(指XTerm Control Sequences)中的推理例子似乎模糊不清:

  • xterm处理字符集“K”(德语)
  • 字符集“B”是US-ASCII
  • 假设字符集“B”实际上呈现为ISO-8859-1,那三个字符是Ä,Ö和Ü(这是德语的合理使用,用于打印一些常见的变音符号)。

screen的日志记录不是由此功能处理,而是在翻译之前记录发送到终端的原始字符。