Ha 'man ls temp.txt'. Il file di testo di output è danneggiato

26

Quando eseguo man ls > temp.txt il file di testo di output è corrotto. Per corruzione intendo che la prima e l'ultima lettera in alcune parole sono ripetutamente esagerate.

Diverse prime righe in temp.txt :

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

NNAAMMEE
     llss -- list directory contents

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

DDEESSCCRRIIPPTTIIOONN

E così via. Senza reindirizzamento man ls è perfettamente normale. Cosa sta succedendo?

    
posta seeker_of_bacon 21.07.2015 - 15:33
fonte

5 risposte

30

Da man man :

To get a plain text version of a man page, without backspaces and underscores, try

    # man foo | col -b > foo.mantxt

man stampa la versione formattata della pagina man, i caratteri di sottolineatura e le lettere doppie sono analizzati

Its not so much that they are 'parsed' but rather "if you don't have a terminal, bold format is to be displayed as a repeated character". Once you hook it up to a terminal (vt100, xterm, Terminal, etc...), man recognizes the terminal and sends the appropriate control codes to do color, bold, underline and the like. Its being parsed correctly - just for a null terminal type.

commento di MichaelT

    
risposta data 21.07.2015 - 15:44
fonte
21

C'era una volta, i computer venivano regolarmente collegati ai teletripes (teleprinters) che stampavano tutto il testo su carta in tempo reale al momento della ricezione. Sebbene le teleprinters non avessero alcun supporto per il testo sottolineato o grassetto, emettendo una sottolineatura, il backspacing e stampando qualcos'altro, questo avrebbe fatto apparire qualcos'altro sottolineato. Analogamente, l'output di un carattere, il backspacing e l'output dello stesso carattere tendono a far apparire il carattere più scuro, anche se l'efficacia di ciò varia a seconda della qualità del nastro installato (se il nastro era vecchio e debole, digitando lo stesso carattere due volte lo renderebbe molto più scuro: con un nuovo nastro che digita il carattere, anche una sola volta otterrebbe un oscuramento vicino al massimo). Inoltre, anche se un utente non fosse collegato a una stampante, il reindirizzamento dell'output di man a uno spooler di stampa sarebbe stato abbastanza comune, il che probabilmente spiega perché man si comporterebbe in questo modo anche quando l'output è stato reindirizzato. / p>

BTW, su alcune stampanti (e persino su quelle dei teleprinters), le prestazioni di _←U_←N_←D_←E_←R_←L_←I_←N_←I_←N_←G sarebbero notevolmente peggiori di ___________←←←←←←←←←←←UNDERLINING , poiché il primo richiede che la testina di stampa si inverta ripetutamente (e in genere supera il bersaglio alle due estremità). Lo stesso sarebbe vero quando si usa anche il grassetto multi-strike, ma il comportamento potrebbe effettivamente essere vantaggioso dal momento che la prima volta che ciascun carattere viene stampato seguirà immediatamente un carattere backspace e il secondo no. Se la testina di stampa stava accelerando durante la stampa del primo carattere, ciò avrebbe causato un disallineamento lieve rispetto al secondo, rendendo più efficace l'effetto grassetto.

    
risposta data 22.07.2015 - 00:01
fonte
15

La risposta di Mateusz è corretta, ma vale la pena sottolineare che piuttosto che rimuovere la formattazione destinata a una tty, puoi avere il formato man in modo diverso.

Ad esempio, puoi ottenere un pdf ben formattato con:

man -t ls | pstopdf -i -o ~/ls.pdf
    
risposta data 21.07.2015 - 16:52
fonte
5

In alternativa, ho definito la seguente funzione di shell (chiamata dal plugin OS X di Oh-my-ZSH ):

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

Ciò comporta l'apertura della pagina man desiderata in Anteprima con tutta la bella formattazione che si potrebbe desiderare. È abbastanza facile aggiungere questo singolo alias al tuo ~/.profile (penso che pman sia più semplice di man-preview , quindi ho impostato alias pman='man-preview nel mio ~/.zshrc ).

P.S. Ho visto la funzione pman definita in vari file di punti su Internet, Oh-my-ZSH è proprio dove si trova il mio.

    
risposta data 21.07.2015 - 21:02
fonte
2

Oppure puoi usare ManOpen di Carl Lindberg per cercare e stampare qualsiasi pagina man. ManOpen è stato sviluppato per la prima volta da NeXtStep e funziona ancora grazie a Carl.

    
risposta data 21.07.2015 - 20:40
fonte

Leggi altre domande sui tag