Mit dem Beispielbefehl
man apropos > outputfile
Es wird eine Textdatei generiert, die die formatierte man
Seite von enthält apropos
(mit einigen kleinen Unterschieden in Bezug auf man apropos
direkt auf dem Bildschirm gedruckte, z. B. fett gedruckte Zeichen).
Ich möchte jedoch die maximale Zeilenbreite der generierten Ausgabedatei manuell festlegen, damit alle Absätze auf diese Breite ausgerichtet werden.
man
Seiten werden erstellt durch groff
: Ich habe beispielsweise versucht, .ll 50
einen Absatz der ursprünglichen .gz
man
Quelltextdatei vorzulegen, aber es ist trivial, wenn ich an mehreren man
Seiten arbeiten muss. Außerdem werden nicht alle Zeichen erkannt:
apropos.1:45: warning: can't find character with input code 195
apropos.1:45: warning: can't find character with input code 168
apropos.1:47: warning: can't find character with input code 178
apropos.1:131: warning: can't find character with input code 169
Ich frage mich also, ob es eine einfachere Methode gibt. Wie ändere ich die maximale Linienbreite während der Erstellung eines outputfile
? Gibt es einen bestimmten Befehl?
Bearbeiten :
(Alle folgenden Überlegungen beziehen sich auf Ubuntu 18.04: Ich kann sie in früheren Versionen nicht mehr testen, einschließlich 14.04 der obigen Frage.)
Bei einer einzeiligen temporären Lösung MANWIDTH
gibt es keinen Unterschied , wenn sie noch nicht mit einem benutzerdefinierten Wert exportiert wurde
$ MANWIDTH=60 man apropos > outputfile
und
$ COLUMNS=60 man apropos > outputfile
Die erste Verwendung MANWIDTH
ist jedoch im Prinzip besser.
Bearbeiten 2 (nicht eng mit der Frage verbunden):
Um stattdessen eine permanente Breiteneinstellung vorzunehmen, die auf jeden Manpage-Druck angewendet werden soll, muss der gewünschte Wert der Variablen exportiert werden. Mit:
$ export MANWIDTH=60
# zero or more additional lines
$ man apropos > outputfile
man apropos
wird unabhängig von der Größe des Terminalfensters mit derselben Breite gedruckt. Stattdessen,
$ export COLUMNS=60
# zero or more additional lines
$ man apropos > outputfile
liefert nur dann das gleiche Ergebnis wie zuvor, wenn die Größe des Terminalfensters zwischen export
und nicht geändert wird man <page> > outputfile
.
input code
Fehler nicht reproduzieren ,195 168
könnte in UTF-8 sein. Ist die Manpage auf Englisch? Was ist Ihre Mann-Implementierung? Was ist dein Gebietsschema?man man
ist 2.6.7.1). Die Manpage ist in Italienisch und es ist UTF-8. Was meinst du mit Gebietsschema?locale
? undlocale charmap
?locale
Ausgabe:LANG=it_IT.UTF-8 LANGUAGE= LC_CTYPE="it_IT.UTF-8" LC_NUMERIC="it_IT.UTF-8"
locale charmap
Ausgabe:UTF-8
less
daTERM
nicht festgelegt ist. Ich meinteenv -i LANG=it_IT.UTF-8 man apropos > output
(oder| head
).Antworten:
Verwenden Sie die
MANWIDTH
Umgebungsvariable:Die Manpage für man 2.7.4 sagt:
Das heißt, es überschreibt sowohl
COLUMNS
als auch denioctl
Wert. Ich ziehe es vor, mich nicht auf Änderungen zu verlassenCOLUMNS
(obwohl dies hier funktioniert), da der Wert jedes Mal dynamisch aktualisiert wird, wenn sich die Fenstergröße ändert.Wenn Sie
MANWIDTH
anstelle von verwenden,COLUMNS
können Sie die Änderung auch dauerhaft machen, indem Sie eine Zeile hinzufügen, z. B.export MANWIDTH=60
zu Ihrer Shell-Startdatei.quelle
export MANWIDTH=60
wenn Sie dies in Ihrem einstellen~/.bashrc
. Siehe stackoverflow.com/a/30173376/82216 .man
Ziehen Sie auch in Betracht, eine Funktion einzuschließen, um MANWIDTH abhängig von Ihrer Terminalbreite festzulegen, wie hier im Arch-Wiki vorgeschlagen.export MANWIDTH=60
?export
weil Sie nach einer temporären Lösung gefragt haben: "Wie ändere ich die maximale Zeilenbreite während der Erstellung einer Ausgabedatei? " (Hervorhebung meiner). Möglicherweise möchten Sie Ihre Bearbeitung sogar zurücksetzen, da sie der Frage nicht hinzugefügt wird. (Ein Kommentar ist angemessener.)export
Aussagen geschrieben, weil sie in einem Kommentar fast unlesbar wäre (es ist nicht möglich, Zeilenumbrüche zu erstellen).Versuchen Sie, die
COLUMNS
Umgebungsvariable festzulegen. Funktioniert für mich mitman
abmandb
2.7.0.2 unter Debian mitgroff
1.22.3.Mit der Version unter Ubuntu 14.04 muss ich es schreiben:
Dort,
man
scheint dieCOLUMNS
Umgebungsvariable zu ignorieren , wenn stdin ein Terminal ist (es fragt dann das Terminalgerät nach der Terminalbreite ab).Sie können auch versuchen:
Welches mit
zsh
Ihnen verkürzen kann auf:Sie können dies durch Aufrufen tun
groff
von Hand :Sie können Zeichen mit Eingabecodefehlern nicht finden, weil Sie die Dateien
-Tascii
anstelle von verwendet-Tutf8
und nicht verwendet haben-k
, um sie vorzuverarbeitenpreconv
.quelle
COLUMNS=60 man apropos | head
aber leider ist die Ausgabebreite die gesamte Bildschirmbreite. Kann ich die Variable anCOLUMNS
anderer Stelle oder auf andere Weise festlegen ?COLUMNS=60 < /dev/null man apropos | head
. Sieht aus wie unter Ubuntu 14.04, es vertraut nicht,COLUMNS
ob stdin ein Terminal ist (und erhält die Breite vom Endgerät).Sie können den
fmt
Befehl verwenden, der meines Wissens in jeder Linux-Distribution vorhanden ist.schließt Zeilen mit 70 Zeichen ein.
quelle
Sie können verwenden
fold
wird nach jeweils 20 Zeichen (!) gefaltet. Beachten Sie, dass dadurch Wörter in zwei Teile geteilt werden, da die einzige Option "Alle 20 Zeichen falten" ist.
Um dies zu gewährleisten, können Sie
sed
Folgendes verwenden (mit dynamischer Linienlänge)fügt nach 20 zufälligen Zeichen eine neue Zeile hinzu, gefolgt von einem Leerzeichen (dh einem neuen Wort). Zeilen können also länger als 20 Zeichen sein (Übereinstimmung ist 20 Zeichen, dann ein Leerzeichen, sodass ein Wort mit 26 Zeichen zu einer Zeile mit 26 Zeichen führen würde).
Zum Weglassen des letzten Leerzeichens im
sed
Befehl:quelle