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 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
:
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.