Za pomocą polecenia przykładowego
man apropos > outputfile
generowany jest plik tekstowy, który zawiera sformatowaną man
stronę apropos
(z pewnymi niewielkimi różnicami w odniesieniu do man apropos
bezpośrednio drukowanych na ekranie, takich jak pogrubione znaki).
Chciałbym jednak ręcznie ustawić maksymalną szerokość linii generowanego pliku wyjściowego, aby wszystkie akapity były wyrównane do tej szerokości.
man
strony są tworzone przez groff
: na przykład próbowałem umieścić .ll 50
przed akapitem oryginalnego .gz
man
źródłowego pliku tekstowego, ale jest to trywialne, jeśli muszę pracować na kilku man
stronach. Ponadto nie wszystkie znaki są rozpoznawane:
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
Zastanawiam się więc, czy istnieje bardziej prosta metoda. Jak zmodyfikować maksymalną szerokość linii podczas tworzenia outputfile
? Czy jest jakieś konkretne polecenie?
Edytuj :
(Wszystkie poniższe uwagi dotyczą Ubuntu 18.04: Nie mogę ich więcej testować w poprzednich wersjach, w tym 14.04 powyższego pytania.)
Jeśli chodzi o tymczasowe jednowierszowe rozwiązanie, jeśli MANWIDTH
nie zostało jeszcze wyeksportowane z wartością niestandardową, nie ma między nimi żadnej różnicy
$ MANWIDTH=60 man apropos > outputfile
i
$ COLUMNS=60 man apropos > outputfile
Pierwszy z nich MANWIDTH
jest jednak zasadniczo lepszy.
Edycja 2 (nie ściśle związana z pytaniem):
Aby zamiast tego ustawić stałe ustawienie szerokości, które ma być zastosowane do każdego wydruku strony, konieczne jest wyeksportowanie pożądanej wartości zmiennej. Z:
$ export MANWIDTH=60
# zero or more additional lines
$ man apropos > outputfile
man apropos
zostanie wydrukowany z tą samą szerokością, niezależnie od zmiany rozmiaru okna terminala. Zamiast,
$ export COLUMNS=60
# zero or more additional lines
$ man apropos > outputfile
zapewni taki sam wynik jak poprzednio tylko wtedy, gdy okno terminala nie zostanie przeskalowane pomiędzy export
i man <page> > outputfile
.
input code
błędów195 168
może być w UTF-8. Czy strona podręcznika jest w języku angielskim? Jaka jest implementacja twojego człowieka? Jakie są twoje ustawienia regionalne?man man
2.6.7.1). Strona podręcznika jest w języku włoskim i jest to UTF-8. Co rozumiesz przez ustawienia regionalne?locale
? ilocale charmap
?locale
wyjście:LANG=it_IT.UTF-8 LANGUAGE= LC_CTYPE="it_IT.UTF-8" LC_NUMERIC="it_IT.UTF-8"
locale charmap
wyjście:UTF-8
less
ponieważTERM
nie jest ustawiony. Miałem na myślienv -i LANG=it_IT.UTF-8 man apropos > output
(lub| head
).Odpowiedzi:
Użyj
MANWIDTH
zmiennej środowiskowej:Strona man dla man 2.7.4 mówi:
Oznacza to, że zastępuje zarówno wartość, jak
COLUMNS
iioctl
wartość. Wolę nie polegać na modyfikowaniuCOLUMNS
(chociaż tutaj działa), ponieważ jego wartość jest aktualizowana dynamicznie za każdym razem, gdy zmienia się rozmiar okna.Użycie
MANWIDTH
zamiastCOLUMNS
pozwala również na trwałe wprowadzenie zmiany poprzez dodanie wiersza, na przykładexport MANWIDTH=60
do pliku startowego powłoki.źródło
export MANWIDTH=60
jeśli ustawisz to w swoim~/.bashrc
. Zobacz stackoverflow.com/a/30173376/82216 . Rozważ także zawijanieman
funkcji, aby ustawić MANWIDTH w zależności od szerokości terminala, jak sugerowano tutaj na wiki Arch.export MANWIDTH=60
?export
ponieważ zapytałeś o tymczasowe rozwiązanie: „Jak zmodyfikować maksymalną szerokość linii podczas tworzenia pliku wyjściowego? ” ( Moje podkreślenie). Możesz nawet cofnąć swoją edycję, ponieważ nie dodaje się ona do pytania. (Komentarz jest bardziej odpowiedni.)export
instrukcjami, ponieważ w komentarzu byłoby to prawie nieczytelne (nie byłoby możliwe utworzenie nowego wiersza).Spróbuj ustawić
COLUMNS
zmienną środowiskową. Pracuje dla mnieman
zmandb
2.7.0.2 na Debianie zgroff
1.22.3.W wersji na Ubuntu 14.04 muszę to napisać:
Tam
man
wydaje się lekceważyćCOLUMNS
zmienną środowiskową, jeśli stdin jest terminalem (następnie pyta urządzenie końcowe o szerokość terminala).Możesz także spróbować:
Które z
zsh
Tobą możesz skrócić do:Możesz to zrobić, wywołując
groff
ręcznie jako:Twój nie może znaleźć postać z kodów wejściowych błędów, ponieważ były używane
-Tascii
zamiast-Tutf8
, a nie korzystać-k
z wcześniej przetwarzać plikipreconv
.źródło
COLUMNS=60 man apropos | head
ale niestety szerokość wyjściowa to cała szerokość ekranu. Czy mogę ustawić zmiennąCOLUMNS
gdzie indziej lub w inny sposób?COLUMNS=60 < /dev/null man apropos | head
. Wygląda jak w Ubuntu 14.04, nie ufa,COLUMNS
jeśli stdin jest terminalem (i pobiera szerokość z urządzenia końcowego).Możesz użyć
fmt
polecenia, które, o ile mi wiadomo, jest obecne w dowolnej dystrybucji Linuksa.zawinie linie o długości 70 znaków.
źródło
Możesz użyć
fold
będzie pasować po każdych 20 znakach (!). Pamiętaj, że spowoduje to przecięcie słów na dwie części, ponieważ jedyną opcją jest „pasuj co 20 znaków”
dbając o to, możesz użyć
sed
w następujący sposób (z dynamiczną długością linii)doda nowy wiersz po 20 losowych znakach, po których nastąpi spacja (tj. nowe słowo). Tak więc linie mogą być dłuższe niż 20 znaków (dopasowanie to 20 znaków, a następnie spacja, więc słowo składające się z 26 znaków może dać wiersz składający się z 26 znaków)
Aby pominąć ostatnią spację w
sed
poleceniu:źródło