С помощью команды примера
man apropos > outputfile
генерируется текстовый файл, который содержит отформатированную man
страницу apropos
(с некоторыми небольшими отличиями по сравнению с man apropos
непосредственно напечатанными на экране, такими как жирные символы).
Но я бы хотел вручную установить максимальную ширину строки сгенерированного выходного файла, чтобы все абзацы были выровнены по этой ширине.
man
страницы создаются с помощью groff
: например, я пытался поставить .ll 50
перед абзацем исходного .gz
man
исходного текстового файла, но это тривиально, если мне нужно работать на нескольких man
страницах. Причем не все персонажи распознаются:
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
Итак, мне интересно, существует ли более простой метод. Как изменить максимальную ширину линии при создании outputfile
? Есть ли какая-то конкретная команда?
Редактировать :
(Все следующие соображения касаются Ubuntu 18.04: я больше не могу тестировать их в предыдущих версиях, включая 14.04 из приведенного выше вопроса.)
Что касается временного решения, состоящего из одной строки, если оно MANWIDTH
еще не было экспортировано с пользовательским значением, разницы между
$ MANWIDTH=60 man apropos > outputfile
и
$ COLUMNS=60 man apropos > outputfile
Первый, использующий MANWIDTH
, однако лучше в принципе.
Изменить 2 (не строго связано с вопросом):
Чтобы вместо этого установить постоянную ширину для любой печати man-страницы, необходимо экспортировать требуемое значение переменной. С:
$ export MANWIDTH=60
# zero or more additional lines
$ man apropos > outputfile
man apropos
будет напечатан с одинаковой шириной независимо от изменения размера окна терминала. Вместо,
$ export COLUMNS=60
# zero or more additional lines
$ man apropos > outputfile
будет обеспечивать тот же результат, что и раньше, только если размер окна терминала не изменяется между export
и man <page> > outputfile
.
input code
ошибки,195 168
может быть, в UTF-8. Справочная страница на английском? Какая у тебя мужская реализация? Какой у тебя язык?man man
2.6.7.1). Страница руководства на итальянском языке, и это UTF-8. Что вы подразумеваете под языком?locale
? аlocale charmap
?locale
выходные данные:LANG=it_IT.UTF-8 LANGUAGE= LC_CTYPE="it_IT.UTF-8" LC_NUMERIC="it_IT.UTF-8"
locale charmap
выходные данные:UTF-8
less
потому чтоTERM
не установлен. Я имел ввидуenv -i LANG=it_IT.UTF-8 man apropos > output
(или| head
).Ответы:
Используйте
MANWIDTH
переменную окружения:Man-страница для человека 2.7.4 гласит:
То есть он переопределяет как значение, так
COLUMNS
иioctl
значение. Я предпочитаю не полагаться на изменениеCOLUMNS
(хотя это работает здесь), поскольку его значение обновляется динамически каждый раз, когда изменяется размер окна.Использование
MANWIDTH
вместоCOLUMNS
позволяет также сделать изменение постоянным, добавив строку, например, вexport MANWIDTH=60
файл запуска оболочки.источник
export MANWIDTH=60
эту настройку в своем~/.bashrc
. См. Stackoverflow.com/a/30173376/82216 . Кроме того, рассмотритеman
возможность включения функции для установки MANWIDTH в зависимости от ширины вашего терминала, как предлагается здесь на вики Arch.export MANWIDTH=60
?export
потому что вы спросили о временном решении: «Как изменить максимальную ширину линии при создании выходного файла? » ( Выделено мое). Вы можете даже отменить редактирование, поскольку оно не добавляет вопроса. (Комментарий более уместен.)export
заявлениями, потому что в комментарии это было бы почти нечитаемо (не было возможности создавать новые строки).Попробуйте установить
COLUMNS
переменную среды. Работы для меня сman
отmandb
2.7.0.2 на Debian сgroff
1.22.3.С версией на Ubuntu 14.04 мне нужно написать это:
Там,
man
похоже, игнорируетсяCOLUMNS
переменная окружения, если stdin является терминалом (затем он запрашивает у терминального устройства ширину терминала).Вы также можете попробовать:
Который с
zsh
вами можно сократить до:Вы можете сделать это, вызвав
groff
вручную как:Ваш не может найти символ с входным кодом ошибки были , потому что вы использовали
-Tascii
вместо-Tutf8
и не использовать-k
для предварительной обработки файлов сpreconv
.источник
COLUMNS=60 man apropos | head
но, к сожалению, ширина вывода равна всей ширине экрана. Могу ли я установить переменную вCOLUMNS
другом месте или другим способом?COLUMNS=60 < /dev/null man apropos | head
. Похоже на Ubuntu 14.04, он не доверяет,COLUMNS
если stdin является терминалом (и получает ширину от терминального устройства).Вы можете использовать
fmt
команду, которая, насколько мне известно, присутствует в любом дистрибутиве Linux.обернут строки в 70 символов.
источник
Ты можешь использовать
fold
будет складываться после каждых 20 символов (!). Обратите внимание, что это будет разрезать слова на две части, так как единственный вариант - «сгибать каждые 20 символов»
заботясь об этом, вы можете использовать
sed
следующее (с динамической длиной строки)добавит новую строку после 20 случайных символов, за которыми следует пробел (т.е. новое слово). Таким образом, строки могут быть длиннее 20 символов (совпадение составляет 20 символов, а затем пробел, поэтому слово из 26 символов приведет к строке из 26 символов)
Для пропуска последнего пробела в
sed
команде:источник