Con el comando de ejemplo
man apropos > outputfile
Se genera un archivo de texto que contiene la manpágina formateada apropos(con algunas pequeñas diferencias con respecto a la man aproposimpresión directa en pantalla, como los caracteres en negrita).
Pero me gustaría establecer manualmente el ancho de línea máximo del archivo de salida generado, para que todos los párrafos se justifiquen a ese ancho.
manlas páginas se crean a través de groff: por ejemplo, traté de poner .ll 50antes de un párrafo del .gz manarchivo de texto original , pero es trivial si necesito trabajar en varias manpáginas. Además, no todos los personajes son reconocidos:
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
Entonces, me pregunto si existe un método más directo. ¿Cómo modificar el ancho máximo de línea, durante la creación de un outputfile? ¿Hay algún comando específico?
Editar :
(Todas las siguientes consideraciones son sobre Ubuntu 18.04: ya no puedo probarlas en versiones anteriores, incluido el 14.04 de la pregunta anterior).
En cuanto a una solución temporal de una línea, si MANWIDTHaún no se ha exportado con un valor personalizado, no hay diferencia entre
$ MANWIDTH=60 man apropos > outputfile
y
$ COLUMNS=60 man apropos > outputfile
MANWIDTHSin embargo , el primero, usar , es mejor en principio.
Edición 2 (no estrictamente relacionada con la pregunta):
Para hacer una configuración de ancho permanente que se aplicará a cualquier impresión de página de manual, es necesario exportar el valor deseado de la variable. Con:
$ export MANWIDTH=60
# zero or more additional lines
$ man apropos > outputfile
man aproposse imprimirá con el mismo ancho independientemente de cualquier cambio de tamaño de la ventana de terminal. En lugar,
$ export COLUMNS=60
# zero or more additional lines
$ man apropos > outputfile
proporcionará el mismo resultado que antes solo si la ventana de terminal no cambia de tamaño entre exporty man <page> > outputfile.

input codeerrores195 168podría ser è en UTF-8. ¿La página del manual está en inglés? ¿Cuál es tu implementación de hombre? ¿Cuál es tu localidad?man manes 2.6.7.1). La página del manual está en italiano y es UTF-8. ¿Qué quieres decir con locale?locale? ylocale charmap?localesalida:LANG=it_IT.UTF-8 LANGUAGE= LC_CTYPE="it_IT.UTF-8" LC_NUMERIC="it_IT.UTF-8"locale charmapsalida:UTF-8lessporqueTERMno se ha establecido. Quise decirenv -i LANG=it_IT.UTF-8 man apropos > output(o| head).Respuestas:
Use la
MANWIDTHvariable de entorno:La página de manual para man 2.7.4 dice:
Es decir, anula ambos
COLUMNSy elioctlvalor. Prefiero no confiar en la modificaciónCOLUMNS(aunque funciona aquí) ya que su valor se actualiza dinámicamente cada vez que cambia el tamaño de la ventana.El uso en
MANWIDTHlugar deCOLUMNStambién le permite hacer que el cambio sea permanente al agregar una línea comoexport MANWIDTH=60a su archivo de inicio de shell.fuente
export MANWIDTH=60si configura esto en su~/.bashrc. Ver stackoverflow.com/a/30173376/82216 . Además, considere envolvermanen una función para establecer ANCHO DEL HOMBRE dependiendo del ancho de su terminal, como se sugiere aquí en la wiki de Arch.export MANWIDTH=60?exportporque usted preguntó acerca de una solución temporal: "¿Cómo modificar el ancho máximo de línea, durante la creación de un archivo de salida? " (Énfasis mío). Es posible que incluso desee revertir su edición, ya que no se agrega a la pregunta. (Un comentario es más apropiado.)exportdeclaraciones porque en un comentario sería casi ilegible (no sería posible crear nuevas líneas).Intente configurar la
COLUMNSvariable de entorno. Obras para mí conmandemandb2.7.0.2 en Debian congroff1.22.3.Con la versión en Ubuntu 14.04, necesito escribirla:
Allí,
manparece ignorar laCOLUMNSvariable de entorno si stdin es un terminal (luego consulta el dispositivo del terminal para conocer el ancho del terminal).También puedes probar:
Que con
zshusted puede acortar a:Puede hacerlo invocando
groffa mano como:No puede encontrar el carácter con errores de código de entrada porque lo utilizó en
-Tasciilugar de-Tutf8y no lo utilizó-kpara preprocesar los archivospreconv.fuente
COLUMNS=60 man apropos | headpero desafortunadamente el ancho de salida es todo el ancho de la pantalla. ¿Puedo configurar la variable enCOLUMNSotro lugar o de otra manera?COLUMNS=60 < /dev/null man apropos | head. Parece que en Ubuntu 14.04, no confíaCOLUMNSsi stdin es un terminal (y obtiene el ancho del dispositivo terminal).Puede usar el
fmtcomando, que hasta donde yo sé está presente en cualquier distribución de Linux.cerrará líneas a 70 caracteres.
fuente
Puedes usar
foldse plegará después de cada 20 caracteres (!). Tenga en cuenta que esto cortará las palabras en dos, ya que la única opción es "doblar cada 20 caracteres"
teniendo en cuenta esto, puede usar
sedlo siguiente (con longitud de línea dinámica)agregará una nueva línea después de 20 caracteres aleatorios seguidos de un espacio (es decir, una nueva palabra). Por lo tanto, las líneas pueden tener más de 20 caracteres (la coincidencia es de 20 caracteres y luego un espacio para que una palabra de 26 caracteres dé como resultado una línea de 26 caracteres)
Para omitir el último espacio en el
sedcomando:fuente