Warum sind die Abschnittsüberschriften von Manpages nicht vollständig überschaubar?

14

Dies wurde in El Capitan und in der High Sierra eines Kollegen im Standard-Terminal (bash) getestet.

user@hostname ~ $ man ls | grep "BU"
BUGS
user@hostname ~ $ man ls | grep "BUG"
user@hostname ~ $ 
user@hostname ~ $ man ls | grep "IEEE"
     files in order to be compatible with the IEEE Std 1003.2 (``POSIX.2'')
     The ls utility conforms to IEEE Std 1003.1-2001 (``POSIX.1'').

Zur Verdeutlichung: "BUGS" ist ein Abschnittstitel in dieser (und verschiedenen anderen) Hilfeseiten. Bei Abschnittsüberschriften scheint das Greifen nur für die ersten beiden Zeichen zu funktionieren. Dies ist in einigen verschiedenen Abschnittsüberschriften, die wir ausprobiert haben, konsistent. Für den Rest des Inhalts grepscheint es wie erwartet zu funktionieren.

Ich habe in eine Linux-Box mit Nicht-BSD-Geschmack (Amazon Linux) geschrieben und es scheint nicht dasselbe Verhalten zu zeigen.

Was ist denn hier los?

Jonathan Merklin
quelle
Dies ist Teil des Grundes, warum ich BSD Mann hasse. Es formatiert den Text und führt den Pager auch dann aus, wenn es sich bei der Ausgabe um eine Pipe handelt. Und mein Pager ist vim, also hat Linus mir jemals verboten man foo | grep bar, dass ich eine nicht reagierende Pipeline bekomme (und vielleicht ein kaputtes Terminal, um hochzufahren). : / mandb man , was Sie normalerweise unter Linux sehen, ist sinnvoller.
Muru
unix.stackexchange.com/questions/371062 ist auch eine MacOS-Frage.
JdeBP

Antworten:

15

Sie können sehen, was passiert, wenn Sie die Rohcodes in einer Manpage anzeigen. Eine Möglichkeit, dies zu tun, besteht darin, die Manpage in eine Datei zu exportieren und deren Inhalt direkt zu überprüfen:

man ls > man.ls
nano man.ls

Das Wort "BUGS" sieht in der Datei tatsächlich so aus:

B^HBU^HUG^HGS^HS

Sie werden sehen, dass die Überschriften Formatierungszeichen enthalten, sodass das gesamte Wort "BUGS" nicht vorhanden ist.


Wenn Sie auf den Klartextinhalt der Handbuchseite zugreifen möchten, können Sie den Befehl verwenden

man -P cat <thepage>

Die -POption setzt den Pager auf ein anderes Unix und catignoriert die Formatierungsinformationen, was eine Klartextausgabe ergibt. Dies scheint jedoch auf macOS nicht zu funktionieren, sodass für die Ausgabe ein manueller col -bSchritt in der Pipeline erforderlich ist :

man ls | col -b | grep BUGS
Schotte
quelle
2
Vielen Dank, Scot! Das Umleiten in eine Datei und das Öffnen in einem Texteditor hätte das erste sein sollen, was ich versucht habe. Mit diesen Informationen und den Informationen von unix.stackexchange.com/a/15866 (dh man ls | col -b | grep "BUGS") konnte ich das bekommen, was ich wollte.
Jonathan Merklin
7
Holy Moly, das Fettgedruckte ist die alte TTY- und Schreibmaschinen-Ära. Geben Sie einen Buchstaben und eine Rücktaste ein und wiederholen Sie die Eingabe, da Sie wissen, dass sie nicht perfekt ausgerichtet sind und mehr Tinte hinterlassen. Es muss einen nroffBefehl geben, der übersetzt werden muss, wenn Sie müssen. grep Würde es Ihnen etwas ausmachen, wenn ich diesen Befehl um die Übergabe des richtigen Befehls an groffvia erweitern würde man?
bmike
@Kroltan +10 und +10 auch zu scot. Das ist viel eleganter, als dass ich nicht daran gedacht hätte, diese bestimmte Katze zu häuten.
bmike
@Kroltan Hmmm - bei mir man -P cat ls | grep BUGSfunktioniert das identisch man ls | grep BUGS, beide geben nichts zurück.
Scot
1
Für manuelle Systeme, die GNU roff verwenden, gibt es tatsächlich Optionen, die verhindern, grottydass TTY-37- oder ECMA48-Steuersequenen ausgegeben werden.
JdeBP