Hat `man ls> temp.txt`. Ausgabetextdatei ist beschädigt

27

Wenn ich man ls > temp.txtdie Ausgabe-Textdatei ausführe, ist sie beschädigt. Mit korrumpiert meine ich, dass der erste und der letzte Buchstabe in einigen Wörtern zu oft wiederholt werden.

Mehrere erste Zeilen 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

Und so weiter. Ohne Umleitung man lsist das völlig normal. Was ist los?

Specksucher
quelle
Interessanterweise zeigt das Anzeigen der Datei mit lessoder moredie Formatierung korrekt an. Wenn Sie verwenden vim, werden die unformatierten Backspaces ( ^H) mit den zusätzlichen Buchstaben angezeigt.
Kelvin
2
Ihre Dateien leiden unter Schluckauf.
Cthulhu
Interessanterweise verhält sich der Befehl man auf meinem Linux-Computer nicht so, wenn die Ausgabe umgeleitet wird.
David Bailey

Antworten:

30

Von man man:

Versuchen Sie, eine Manpage im Nur-Text-Format ohne Leerzeichen und Unterstriche zu erhalten

    # man foo | col -b > foo.mantxt

mandruckt eine formatierte Version der Manpage, Unterstriche und Doppelbuchstaben werden analysiert

Es ist nicht so sehr, dass sie "analysiert" werden, sondern vielmehr "wenn Sie kein Terminal haben, muss das Fettformat als wiederholtes Zeichen angezeigt werden". Sobald Sie es an ein Terminal anschließen (vt100, xterm, Terminal, etc ...), erkennt man das Terminal und sendet die entsprechenden Steuercodes, um Farbe, Fettdruck, Unterstreichung und dergleichen zu tun. Es wird korrekt analysiert - nur für einen Null-Terminaltyp.

Kommentar von MichaelT

Mateusz Szlosek
quelle
21

Es war einmal so, dass Computer routinemäßig an Teletypen (Ferndrucker) angeschlossen wurden, die den gesamten Text in Echtzeit auf Papier druckten, sobald er empfangen wurde. Obwohl es in Ferndruckern keine Möglichkeiten für unterstrichenen oder fettgedruckten Text gab, würde das Ausgeben einer Unterstreichung, das Zurücksetzen und das Drucken von etwas anderem dazu führen, dass etwas anderes unterstrichen erscheint. Die Ausgabe eines Zeichens, das Zurücksetzen und das Ausgeben desselben Zeichens lassen das Zeichen dunkler erscheinen, obwohl die Wirksamkeit davon abhängt, wie gut das installierte Farbband ist (wenn das Farbband alt und schwach ist, geben Sie dasselbe Zeichen zweimal ein) würde es deutlich dunkler machen; mit einem neuen Farbband würde das Zeichen auch nur einmal fast die maximale Schwärze erreichen). Selbst wenn ein Benutzer nicht an einen Drucker angeschlossen war,manzu einem Druck-Spooler wäre ziemlich verbreitet gewesen, was wahrscheinlich erklärt, warum mansich das so verhalten würde, selbst wenn die Ausgabe umgeleitet wurde.

Übrigens wäre bei einigen Druckern (und sogar bei Ferndruckern) die Leistung von _←U_←N_←D_←E_←R_←L_←I_←N_←I_←N_←Gmerklich schlechter als ___________←←←←←←←←←←←UNDERLINING, da bei ersteren der Druckkopf die Richtung wiederholt umkehren muss (und normalerweise sein Ziel an beiden Enden überschreitet). Das Gleiche gilt für die Verwendung von Fettdruck mit mehreren Anschlägen. Dort kann das Verhalten jedoch von Vorteil sein, da beim ersten Ausdruck jedes Zeichen unmittelbar auf ein Backspace-Zeichen folgt und das zweite nicht. Wenn der Druckkopf beim Drucken des ersten Zeichens beschleunigt würde, würde dies zu einer geringfügigen Fehlausrichtung des ersten Zeichens gegenüber dem zweiten führen, was den Fettdruckeffekt effektiver macht.

Superkatze
quelle
Je mehr ich über Unix lerne, desto mehr stelle ich fest, dass es wie Windows mit Abwärtskompatibilität behaftet ist.
Siyuan Ren
Ordentliche Geschichtsstunde! Schön zu sehen, warum bestimmte Methoden anderen vorgezogen werden.
Dustin Wheeler
15

Die Antwort von Mateusz ist richtig, aber es ist erwähnenswert, dass Sie die Formatierung für ein Tty nicht streichen, sondern das Format von man anders festlegen können.

Beispielsweise können Sie stattdessen ein schön formatiertes PDF erhalten mit:

man -t ls | pstopdf -i -o ~/ls.pdf
Tim B
quelle
Ich benutze OnyX seit Jahren hauptsächlich, um meine Manpages so zu drucken. Nicht mehr! Ich schreibe dies in ein Skript, das alle Manpages auf meinem System ausführt. Vielen Dank dafür, dass ich vor langer Zeit aufgehört habe zu suchen, warum ich OnyX verwendet habe. Ich mache solche Dinge viel lieber von einem Terminal aus und jetzt kann ich es.
user3439894
Schönes Feature. Gibt es eine einfache Möglichkeit, HTML auszugeben? gzip -dc $(man -w ls) | groff -Thtml -mandoc -c > /tmp/man-ls.html
Kelvin
Die Manpage für man besagt, dass -tFormate mit groff -Tps ...und von Strings unter / usr / bin / man hartcodiert zu sein scheinen. Und da -TpsGROFF_TYPESETTER überschrieben wird, ist Ihre Lösung möglicherweise die rentabelste. Es fehlt Ihnen jedoch ein Schritt in Ihrer Pipeline. Sie wollen tbl dann groff. Versuchen Sie man -d ls, die verwendete Pipeline anzuzeigen.
Tim B
6

Als Alternative habe ich die folgende Shell-Funktion definiert (wird vom Oh-my-ZSH OS X-Plugin aufgerufen ):

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

Dies führt dazu, dass die gewünschte Manpage in der Vorschau mit allen hübschen Formatierungen geöffnet wird, die man sich nur wünschen kann. Es ist einfach genug, diesen einzelnen Alias ​​zu Ihrem hinzuzufügen ~/.profile(ich denke, es pmanist einfacher als man-preview, also habe ich alias pman='man-previewin meinem festgelegt ~/.zshrc).

PS Ich habe die pmanin verschiedenen Punktedateien definierte Funktion im Internet gesehen. Oh-my-ZSH befindet sich zufällig dort, wo meine definiert ist.

Dustin Wheeler
quelle
2

Sie können auch ManOpen von Carl Lindberg verwenden, um nach Manpages zu suchen und diese auszudrucken. ManOpen wurde zuerst für NeXtStep entwickelt und funktioniert dank Carl immer noch.

Sonnenwolf
quelle