Hizo `man ls> temp.txt`. El archivo de texto de salida está dañado

26

Cuando ejecuto man ls > temp.txt el archivo de texto de salida está dañado. Por corrompido me refiero a que las primeras y últimas letras de algunas palabras se repiten excesivamente.

Varias primeras líneas en temp.txt:

LS(1)                     BSD General Commands Manual                    LS(1)

NNAAMMEE
     llss -- list directory contents

SSYYNNOOPPSSIISS
     llss [--AABBCCFFGGHHLLOOPPRRSSTTUUWW@@aabbccddeeffgghhiikkllmmnnooppqqrrssttuuwwxx11] [_f_i_l_e _._._.]

DDEESSCCRRIIPPTTIIOONN

Y así. Sin redireccion man ls es perfectamente normal ¿Qué esta pasando?

seeker_of_bacon
fuente
Curiosamente, viendo el archivo usando less o more muestra el formato correctamente. Si utiliza vim, mostrará los backspaces en bruto ( ^H ) con las letras extras.
Kelvin
2
Sus archivos sufren de hipo.
Cthulhu
Interesante, el comando man en mi computadora Linux no se comporta así cuando se redirige la salida.
David Bailey

Respuestas:

30

Desde man man:

Para obtener una versión de texto simple de una página de manual, sin espacios de retroceso ni guiones bajos, intente

    # man foo | col -b > foo.mantxt

man Imprime la versión formateada de la página man, los guiones bajos y las letras dobles son analizado

No es tanto que se "analicen", sino que "si no tiene un terminal, el formato en negrita se mostrará como un carácter repetido". Una vez que lo conecta a un terminal (vt100, xterm, Terminal, etc.), el hombre reconoce el terminal y envía los códigos de control apropiados para hacer color, negrita, subrayado y similares. Se está analizando correctamente, solo para un tipo de terminal nulo.

comentario de MichaelT

Mateusz Szlosek
fuente
21

Érase una vez, las computadoras se conectaban de forma rutinaria a los teletipos (teleprinters) que imprimirían todo el texto en papel en tiempo real a medida que se recibía. Si bien los teletipos no tienen ninguna facilidad para el texto subrayado o en negrita, la salida de un subrayado, el retroceso y la impresión de otra cosa podrían hacer que esa otra cosa aparezca subrayada. Del mismo modo, la salida de un carácter, el retroceso y la salida del mismo carácter tenderían a hacer que el carácter aparezca más oscuro, aunque su efectividad variará dependiendo de la calidad de la cinta instalada (si la cinta era antigua y débil, escriba el mismo carácter dos veces). lo haría significativamente más oscuro; con una nueva cinta escribiendo el carácter, incluso una vez se lograría un nivel de negrura máximo. Además, incluso si un usuario no estuviera conectado a una impresora, redirigir la salida de man a una cola de impresión habría sido bastante común, lo que probablemente explica por qué man se comportaría de esa manera incluso cuando se redirigiera la salida.

Por cierto, en algunas impresoras (e incluso impresoras telefónicas), el rendimiento de _←U_←N_←D_←E_←R_←L_←I_←N_←I_←N_←G sería notablemente peor que ___________←←←←←←←←←←←UNDERLINING, ya que el primero requiere que el cabezal de impresión invierta repetidamente la dirección (y generalmente sobrepasa su objetivo en ambos extremos). Lo mismo sería cierto cuando se usa negrita de múltiples golpes también, pero el comportamiento podría ser ventajoso ya que la primera vez que se imprime cada carácter seguiría inmediatamente un carácter de retroceso y la segunda no. Si el cabezal de impresión estaba acelerando mientras imprimía el primer carácter, eso haría que se alineara ligeramente con respecto al segundo, haciendo que el efecto de cara negrita sea más efectivo.

supercat
fuente
Cuanto más aprendo sobre Unix, más me encuentro con la compatibilidad con versiones anteriores, al igual que con Windows.
Siyuan Ren
Lección de historia aseado! Es genial ver por qué ciertos métodos pueden ser preferidos a otros.
Dustin Wheeler
15

La respuesta de Mateusz es correcta, pero vale la pena señalar que, en lugar de eliminar el formato destinado a un tty, puede tener un formato de hombre diferente.

Por ejemplo, puedes obtener un pdf bien formateado con:

man -t ls | pstopdf -i -o ~/ls.pdf
Tim B
fuente
he estado usando Ónix Desde hace años, principalmente para obtener mis páginas man impresas como esto lo hace. ¡No más! Escribiré esto en un script que haga todas las páginas man de mi sistema. Muchas gracias por esto ya que dejé de mirar hace mucho tiempo por qué he estado usando OnyX. Prefiero hacer cosas como esta desde una Terminal y ahora puedo.
user3439894
Buena característica ¿Hay una manera sencilla de generar HTML además de esto? gzip -dc $(man -w ls) | groff -Thtml -mandoc -c > /tmp/man-ls.html
Kelvin
La página del hombre para hombre dice que -t formatos con groff -Tps ... y de ejecutar cadenas en / usr / bin / man, eso parece estar codificado. Y desde -Tps reemplaza a GROFF_TYPESETTER, su solución podría ser la más viable. Aunque le falta un paso en su tubería. Quieres tbl y luego groff. Tratar man -d ls Para ver el oleoducto que utiliza.
Tim B
5

Como alternativa, tengo la siguiente función de shell definida (llamada desde Oh-my-ZSH el plugin de OS X):

man-preview () {
    man -t "$@" | open -f -a /Applications/Preview.app
}

Esto da como resultado que la página de manual deseada se abra en Vista previa con todo el formato bonito que uno podría desear. Es bastante fácil agregar este único alias a tu ~/.profile (Yo creo que pman es más fácil que man-preview, así que me puse alias pman='man-preview en mi ~/.zshrc ).

PD He visto el pman La función definida en varios archivos de puntos en Internet, Oh-my-ZSH resulta que es donde se define el mío.

Dustin Wheeler
fuente
2

O puede usar ManOpen by Carl Lindberg para buscar e imprimir cualquier página de manual. ManOpen se desarrolló por primera vez para NeXtStep y aún funciona gracias a Carl.

Sunwolf
fuente