Con el comando de ejemplo
man apropos > outputfile
Se genera un archivo de texto que contiene la man
página formateada apropos
(con algunas pequeñas diferencias con respecto a la man apropos
impresió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.
man
las páginas se crean a través de groff
: por ejemplo, traté de poner .ll 50
antes de un párrafo del .gz
man
archivo de texto original , pero es trivial si necesito trabajar en varias man
pá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 MANWIDTH
aún no se ha exportado con un valor personalizado, no hay diferencia entre
$ MANWIDTH=60 man apropos > outputfile
y
$ COLUMNS=60 man apropos > outputfile
MANWIDTH
Sin 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 apropos
se 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 export
y man <page> > outputfile
.
input code
errores195 168
podrí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 man
es 2.6.7.1). La página del manual está en italiano y es UTF-8. ¿Qué quieres decir con locale?locale
? ylocale charmap
?locale
salida:LANG=it_IT.UTF-8 LANGUAGE= LC_CTYPE="it_IT.UTF-8" LC_NUMERIC="it_IT.UTF-8"
locale charmap
salida:UTF-8
less
porqueTERM
no se ha establecido. Quise decirenv -i LANG=it_IT.UTF-8 man apropos > output
(o| head
).Respuestas:
Use la
MANWIDTH
variable de entorno:La página de manual para man 2.7.4 dice:
Es decir, anula ambos
COLUMNS
y elioctl
valor. 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
MANWIDTH
lugar deCOLUMNS
también le permite hacer que el cambio sea permanente al agregar una línea comoexport MANWIDTH=60
a su archivo de inicio de shell.fuente
export MANWIDTH=60
si configura esto en su~/.bashrc
. Ver stackoverflow.com/a/30173376/82216 . Además, considere envolverman
en 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
?export
porque 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.)export
declaraciones porque en un comentario sería casi ilegible (no sería posible crear nuevas líneas).Intente configurar la
COLUMNS
variable de entorno. Obras para mí conman
demandb
2.7.0.2 en Debian congroff
1.22.3.Con la versión en Ubuntu 14.04, necesito escribirla:
Allí,
man
parece ignorar laCOLUMNS
variable 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
zsh
usted puede acortar a:Puede hacerlo invocando
groff
a mano como:No puede encontrar el carácter con errores de código de entrada porque lo utilizó en
-Tascii
lugar de-Tutf8
y no lo utilizó-k
para preprocesar los archivospreconv
.fuente
COLUMNS=60 man apropos | head
pero desafortunadamente el ancho de salida es todo el ancho de la pantalla. ¿Puedo configurar la variable enCOLUMNS
otro lugar o de otra manera?COLUMNS=60 < /dev/null man apropos | head
. Parece que en Ubuntu 14.04, no confíaCOLUMNS
si stdin es un terminal (y obtiene el ancho del dispositivo terminal).Puede usar el
fmt
comando, que hasta donde yo sé está presente en cualquier distribución de Linux.cerrará líneas a 70 caracteres.
fuente
Puedes usar
fold
se 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
sed
lo 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
sed
comando:fuente