1 votos

Al consultar la página man, algunos caracteres producidos por `man` no se muestran

Cuando hago en mi terminal a, por ejemplo,

man tr

Puedo ver que algunos de los textos se representan en diferentes colores, en función de los caracteres de control que man produce en su salida, mientras que otras no.

Por ejemplo, el terminal muestra

NAME
 tr <E2><80><93> translate characters

de lo que concluyo, que la secuencia hexadecimal E28093 no se interpreta. Mi conjetura es que esta es una cierta secuencia de caracteres unicode (tal vez para un guión largo), pero no entiendo por qué no se muestra.

Aquí tiene una captura de pantalla screenshot de mi terminal.

Mi TERM se establece en xterm-256color y el LANG se establece en es_GB.utf8 y no tengo ni un PAGER ni un MANPAGER definida, lo que significa que man tuberías a less .

ACTUALIZACIÓN : Sin embargo, he definido la variable LESS que proporciona opciones por defecto para less . Su valor es -A --quit-if-one-screen --LONG-PROMPT -X -R pero no veo cómo esto podría explicar el comportamiento. Además, incluso cuando utilizo explícitamente un paginador diferente, es decir

MANPAGER=more man tr

la salida es la misma.

Los caracteres Unicode parecen mostrarse correctamente. Por ejemplo, si hago en la línea de comandos (que es zsh) un

echo 

Veo como salida un .

Esto ocurre tanto con Terminal.app como con iTerm2. La fuente utilizada es Mónaco ,

BTW, a petición del usuario mmmmmm Adjunto una captura de pantalla de la salida producida por man -d tr :

screenshot

ACTUALIZACIÓN

Hice un

man tr | tee tmp/man_tr.txt
xxd tmp/mat_tr.txt

para ver el código hexadecimal exacto producido por tr. El primer par de líneas se parecen a esto:

00000000: 5452 2831 2920 2020 2020 2020 2020 2020  TR(1)           
00000010: 2020 2020 2020 2020 2020 2020 2047 656e               Gen
00000020: 6572 616c 2043 6f6d 6d61 6e64 7320 4d61  eral Commands Ma
00000030: 6e75 616c 2020 2020 2020 2020 2020 2020  nual            
00000040: 2020 2020 2020 2020 2020 2054 5228 3129             TR(1)
00000050: 0a0a 4e08 4e41 0841 4d08 4d45 0845 0a20  ..N.NA.AM.ME.E. 
00000060: 2020 2020 7408 7472 0872 20e2 8093 2074      t.tr.r ... t
00000070: 7261 6e73 6c61 7465 2063 6861 7261 6374  ranslate charact
00000080: 6572 730a 0a53 0853 5908 594e 084e 4f08  ers..S.SY.YN.NO.
00000090: 4f50 0850 5308 5349 0849 5308 530a 2020  OP.PS.SI.IS.S.  
000000a0: 2020 2074 0874 7208 7220 5b2d 082d 4308     t.tr.r [-.-C.
000000b0: 4363 0863 7308 7375 0875 5d20 5f08 735f  Cc.cs.su.u] _.s_

Podemos ver la ominosa secuencia de bytes e28093 en la línea del offset 60. ¿Qué demonios es esto? No puede ser una secuencia UTF-8 (no hay secuencias de 3 bytes que empiecen por E2).

Además estos códigos fantasma no aparecen en cada página de manual. Lo veo con man cat pero no aparecen con man man , man zsh o man bash ..... Pero hay un sistema en él:

He instalado a través de Homebrew el Herramientas Gnu para el Mac. Para instalarlas, hay dos opciones: (1) hacer que reemplacen los archivos originales, es decir, GNU-tr reemplaza a MacOS-tr, o (2) dejar los binarios originales sin cambios e instalar las herramientas GNU con un nuevo nombre, es decir, GNU-tr ahora se llama /usr/local/bin/gtr mientras que el original está disponible como /usr/bin/tr . He decidido optar por la segunda opción, es decir, tener las versiones GNU junto con las versiones BSD, pero en directorios diferentes. Dado que sus nombres difieren, no debería haber ningún problema con PATH tampoco. Por cierto, no he definido la variable MANPATH pero tampoco debería importar, ya que los programas tienen nombres diferentes ( tr vs. gtr ).

Ahora cuando hago un

man gtr

Veo la página man de GNU tr, formateada muy bien; pero cuando hago un

man tr

Veo la página BSD tr manpage, con la secuencia E2-hex en ella. Al menos esto muestra, bajo qué condición sucede - todo el lío está relacionado con las utilidades GNU -, aunque todavía no entiendo, POR QUÉ sucede.

3voto

Jose Chavez Puntos 645

La "misteriosa secuencia hexadecimal" son en realidad los bytes UTF-8 de un guión en - en hexadecimal es 0xE28093.

El guión en debería estar ahí - está en la página man. La salida de esos bytes (0xE28093) de man también es como se supone que debe ser en una instalación estándar.

El problema en tu instalación podría estar en el software del terminal o en su configuración. Si utiliza Terminal.app Compruebe su Settings y asegúrese de que bajo el Profiles en la pestaña Advanced debajo de International debe decir "Text encoding: Unicode (UTF-8)" .

De acuerdo con sus comentarios, usted tiene ya que los mismos bytes acaba de salida utilizando cat da como resultado el carácter guión correcto.

Por lo tanto, lo más probable es que el problema esté en la configuración de tu paginador. Puede intentar eliminar -X y -R del LESS variable de entorno. Sólo tienes que establecer la variable en vacío y probar el comando man para ver si hay un efecto.

2voto

user1934428 Puntos 113

Acabo de encontrar (con la valiosa ayuda de los comentarios de mmmmmm y jksoergaard ) que mis localizadores ( less y more ) tienen problemas para mostrar caracteres multibyte UTF8, y que esto no está relacionado con man . Por lo tanto, creo que podemos considerar este pregunta como cerrada. Sin embargo, investigaré la cuestión de los caracteres multibyte y los buscapersonas (tal vez simplemente no funcionen juntos), y publicaré una nueva pregunta sobre este tema, si es necesario.

Al menos para less una explicación parece ser aquí . No menciona more , pero puedo hacer que la página man funcione con menos, si configuro

export LESSCHARSET=utf-8

ACTUALIZACIÓN : Como señala el usuario mmmmmm /usr/bin/more y /usr/bin/less apuntan al mismo inodo, lo que explica por qué more también se comporta de esta manera.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X