Avec l'exemple de commande
man apropos > outputfile
un fichier texte est généré qui contient la man
page formatée de apropos
(avec quelques petites différences par rapport à l' man apropos
impression directe à l'écran, comme les caractères gras).
Mais je voudrais définir manuellement la largeur de ligne maximale du fichier de sortie généré, afin que tous les paragraphes soient justifiés à cette largeur.
man
les pages sont créées via groff
: par exemple, j'ai essayé de mettre .ll 50
avant un paragraphe du .gz
man
fichier texte source d' origine , mais c'est trivial si j'ai besoin de travailler sur plusieurs man
pages. De plus tous les personnages ne sont pas reconnus:
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
Je me demande donc s'il existe une méthode plus simple. Comment modifier la largeur maximale de ligne, lors de la création d'un outputfile
? Existe-t-il une commande spécifique?
Modifier :
(Toutes les considérations suivantes concernent Ubuntu 18.04: je ne peux plus les tester dans les versions précédentes, y compris le 14.04 de la question ci-dessus.)
En ce qui concerne une solution temporaire d'une ligne, si elle MANWIDTH
n'a pas déjà été exportée avec une valeur personnalisée, il n'y a pas de différence entre
$ MANWIDTH=60 man apropos > outputfile
et
$ COLUMNS=60 man apropos > outputfile
La première, en utilisant MANWIDTH
, est cependant meilleure en principe.
Edit 2 (pas strictement lié à la question):
Pour définir à la place un paramètre de largeur permanent à appliquer à toute impression de page de manuel, il est nécessaire d' exporter la valeur souhaitée de la variable. Avec:
$ export MANWIDTH=60
# zero or more additional lines
$ man apropos > outputfile
man apropos
sera imprimé avec la même largeur quel que soit le redimensionnement de la fenêtre du terminal. Au lieu,
$ export COLUMNS=60
# zero or more additional lines
$ man apropos > outputfile
fournira le même résultat qu'auparavant uniquement si la fenêtre du terminal n'est pas redimensionnée entre export
et man <page> > outputfile
.
input code
erreurs195 168
pourraient être è en UTF-8. La page de manuel est-elle en anglais? Quelle est votre implémentation homme? Quelle est votre localisation?man man
est 2.6.7.1). La page de manuel est en italien et elle est UTF-8. Qu'entendez-vous par locale?locale
? etlocale charmap
?locale
sortie:LANG=it_IT.UTF-8 LANGUAGE= LC_CTYPE="it_IT.UTF-8" LC_NUMERIC="it_IT.UTF-8"
locale charmap
sortie:UTF-8
less
carTERM
n'est pas paramétré. Je voulais direenv -i LANG=it_IT.UTF-8 man apropos > output
(ou| head
).Réponses:
Utilisez la
MANWIDTH
variable d'environnement:La page de manuel de man 2.7.4 indique:
Autrement dit, il remplace à la fois
COLUMNS
et laioctl
valeur. Je préfère ne pas compter sur la modificationCOLUMNS
(bien que cela fonctionne ici) car sa valeur est mise à jour dynamiquement à chaque fois que la taille de la fenêtre change.L'utilisation de
MANWIDTH
au lieu deCOLUMNS
vous permet également de rendre la modification permanente en ajoutant une ligne telle queexport MANWIDTH=60
votre fichier de démarrage du shell.la source
export MANWIDTH=60
si le réglage dans votre~/.bashrc
. Voir stackoverflow.com/a/30173376/82216 . En outre, envisager l' emballageman
dans une fonction pour définir MANWIDTH en fonction de votre largeur du terminal, comme le suggère ici sur le wiki Arch.export MANWIDTH=60
?export
car vous avez demandé une solution temporaire: "Comment modifier la largeur de ligne maximale, lors de la création d'un fichier de sortie? " (C'est moi qui souligne). Vous pouvez même annuler votre modification car elle n'ajoute rien à la question. (Un commentaire est plus approprié.)export
déclarations car dans un commentaire ce serait presque illisible (impossible de créer des nouvelles lignes).Essayez de définir la
COLUMNS
variable d'environnement. Fonctionne pour moi avecman
demandb
2.7.0.2 sur Debian avecgroff
1.22.3.Avec la version sur Ubuntu 14.04, je dois l'écrire:
Là,
man
semble ignorer laCOLUMNS
variable d'environnement si stdin est un terminal (il interroge ensuite le terminal pour la largeur du terminal).Vous pouvez également essayer:
Qui avec
zsh
vous peut raccourcir en:Vous pouvez le faire en invoquant
groff
à la main:Votre ne peut pas trouver caractère avec le code d' entrée erreurs étaient parce que vous avez utilisé au
-Tascii
lieu de-Tutf8
et ne pas utiliser-k
de pré-traiter les fichiers avecpreconv
.la source
COLUMNS=60 man apropos | head
:, mais malheureusement, la largeur de sortie est toute la largeur de l'écran. Puis-je définir la variableCOLUMNS
ailleurs ou d'une autre manière?COLUMNS=60 < /dev/null man apropos | head
. On dirait que sur Ubuntu 14.04, il ne fait pas confianceCOLUMNS
si stdin est un terminal (et obtient la largeur du périphérique terminal).Vous pouvez utiliser la
fmt
commande, qui pour autant que je sache, est présente dans n'importe quelle distribution Linux.terminera les lignes à 70 caractères.
la source
Vous pouvez utiliser
fold
se pliera après chaque 20 caractères (!). Notez que cela coupera les mots en deux car la seule option est "plier tous les 20 caractères"
en prenant soin de cela, vous pouvez utiliser
sed
comme suit (avec une longueur de ligne dynamique)ajoutera une nouvelle ligne après 20 caractères aléatoires suivis d'un espace (c'est-à-dire un nouveau mot). Ainsi, les lignes peuvent dépasser 20 caractères (la correspondance est de 20 caractères, puis un espace pour qu'un mot de 26 caractères donne une ligne de 26 caractères)
Pour avoir omis le dernier espace de la
sed
commande:la source