28 votes

J'ai fait `man ls > temp.txt`. Le fichier texte de sortie est corrompu

Quand j'exécute man ls > temp.txt le fichier texte de sortie est corrompu. Par "corrompu", j'entends que les premières et dernières lettres de certains mots sont répétées à l'excès.

Plusieurs premières lignes dans temp.txt :

LS(1)                     BSD General Commands Manual                    LS(1)

NNAAMMEE
     llss -- list directory contents

SSYYNNOOPPSSIISS
     llss [--AABBCCFFGGHHLLOOPPRRSSTTUUWW@@aabbccddeeffgghhiikkllmmnnooppqqrrssttuuwwxx11] [_f_i_l_e _._._.]

DDEESSCCRRIIPPTTIIOONN

Et ainsi de suite. Sans redirection man ls est parfaitement normale. Qu'est-ce qui se passe ?

0 votes

Il est intéressant de noter que la visualisation du fichier en utilisant less o more affiche le formatage correctement. Si vous utilisez vim il affichera les espaces arrière bruts ( ^H ) avec les lettres supplémentaires.

2 votes

Vos fichiers souffrent de contretemps.

0 votes

Intéressant, la commande man sur mon ordinateur Linux ne se comporte pas comme ça quand la sortie est redirigée.

30voto

Mateusz Szlosek Points 21762

De man man :

Pour obtenir une version en texte brut d'une page de manuel, sans les retours arrière et les traits de soulignement, essayez

    # man foo | col -b > foo.mantxt

man imprime la version formatée de la page de manuel, les soulignés et les lettres doubles sont analysé

Ce n'est pas tant qu'ils sont "analysés" mais plutôt "si vous n'avez pas de terminal, le format gras doit être affiché comme un caractère répété". Une fois que vous le connectez à un terminal (vt100, xterm, Terminal, etc...), man reconnaît le terminal et envoie les codes de contrôle appropriés pour faire de la couleur, du gras, du soulignement et autres. Il est analysé correctement - juste pour un type de terminal nul.

commentaire de MichaelT

21voto

supercat Points 311

Il fut un temps où les ordinateurs étaient couramment reliés à des télétypes (téléimprimeurs) qui imprimaient tous les textes sur papier en temps réel, au fur et à mesure de leur réception. Bien que les téléimprimeurs n'aient pas la possibilité de souligner ou de mettre en gras du texte, le fait de souligner un texte, de le reculer et d'imprimer autre chose faisait apparaître ce dernier souligné. De même, le fait de sortir un caractère, de le reculer et de sortir le même caractère tendait à le faire apparaître plus sombre, bien que l'efficacité de cette opération dépendait de la qualité du ruban installé (si le ruban était vieux et faible, le fait de taper le même caractère deux fois le rendait nettement plus sombre ; avec un ruban neuf, le fait de taper le caractère une seule fois permettait d'obtenir une noirceur proche du maximum). En outre, même si l'utilisateur n'était pas relié à une imprimante, le fait de rediriger la sortie de l'application man à un spooler d'impression aurait été assez commun, ce qui explique probablement pourquoi man se comporterait de cette façon même si la sortie était redirigée.

D'ailleurs, sur certaines imprimantes (et même sur des téléimprimeurs), les performances de _U_N_D_E_R_L_I_N_I_N_G serait sensiblement plus mauvais que ___________UNDERLINING En effet, la première nécessite que la tête d'impression change de direction de manière répétée (et dépasse généralement sa cible aux deux extrémités). Il en va de même lors de l'utilisation de caractères gras à frappes multiples, mais dans ce cas, le comportement pourrait être avantageux puisque la première fois que chaque caractère est imprimé, il suit immédiatement un caractère de retour en arrière, alors que la seconde ne le fait pas. Si la tête d'impression accélérait pendant l'impression du premier caractère, elle serait légèrement désalignée par rapport au second, ce qui rendrait l'effet de gras plus efficace.

0 votes

Plus j'en apprends sur Unix, plus je constate qu'il est encombré par la rétrocompatibilité, tout comme Windows.

0 votes

Une belle leçon d'histoire ! C'est formidable de voir pourquoi certaines méthodes sont préférées à d'autres.

15voto

Tim B Points 1522

La réponse de Mateusz est correcte, mais il convient de souligner qu'au lieu de supprimer le formatage destiné à un tty, vous pouvez faire en sorte que man ait un formatage différent.

Par exemple, vous pouvez obtenir un pdf joliment formaté à la place avec :

man -t ls | pstopdf -i -o ~/ls.pdf

0 votes

J'ai utilisé OnyX depuis des années maintenant, principalement pour faire imprimer mes pages de manuel comme cela le fait. C'est fini ! Je vais écrire ceci dans un script qui fera toutes les pages de manuel sur mon système. Merci beaucoup pour cela car j'ai renoncé à chercher il y a longtemps tout pourquoi j'ai utilisé OnyX. Je préfère de loin faire des choses comme ça depuis un Terminal et maintenant je peux.

0 votes

Une fonctionnalité intéressante. Existe-t-il un autre moyen simple d'afficher le code html ? gzip -dc $(man -w ls) | groff -Thtml -mandoc -c > /tmp/man-ls.html

0 votes

La page de manuel de l'homme dit que -t formats avec groff -Tps ... et en exécutant des chaînes sur /usr/bin/man, cela semble être codé en dur. Et comme -Tps surcharge GROFF_TYPESETTER, votre solution pourrait être la plus viable. Cependant, il vous manque une étape dans votre pipeline. Vous voulez tbl puis groff. Essayez man -d ls pour voir le pipeline qu'il utilise.

6voto

Dustin Wheeler Points 602

Comme alternative, j'ai défini la fonction shell suivante (appelée à partir de Oh-my-ZSH (plugin OS X) :

man-preview () {
    man -t "$@" | open -f -a /Applications/Preview.app
}

La page de manuel souhaitée s'ouvre alors dans Aperçu, avec toute la mise en forme que l'on peut souhaiter. Il est assez facile d'ajouter cet alias unique à votre fichier ~/.profile (Je pense pman est plus facile que man-preview donc j'ai mis alias pman='man-preview dans mon ~/.zshrc ).

P.S. J'ai vu le pman définie dans divers fichiers point sur Internet, Oh-my-ZSH se trouve être l'endroit où la mienne est définie.

2voto

Sunwolf Points 31

Ou vous pouvez utiliser ManOpen de Carl Lindberg pour rechercher et imprimer n'importe quelle page de manuel. ManOpen a d'abord été développé pour NeXtStep et fonctionne toujours grâce à Carl.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X