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?


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


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.


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

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.


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.