2016-05-20 1 views
0

J'ai vu des questions et réponses similaires sur stackoverflow.comTelnetClient sortie - ANSI désactiver

Malheureusement, cela ne fonctionne pas pour moi. J'ai le même code que l'exemple donné dans les questions précédentes comme ça, mais le type de terminal "idiot" (telnetClient telnet = new TelnetClient ("idiot") était la solution pour les autres) ne filtre pas les caractères ANSI donc j'obtiens ceci:

Dernière connexion: ven 20 mai 10:09:21 de 172.20.22.244

[01; 33mteltest @ vivadev [00m: [01; 34m ~ [00m $ ls test [01; 33mteltest @ vivadev [00M : [01; 34m ~ [00m $ cd essais cd essais [01; 33mteltest @ vivadev [00m: [01; 34m ~/tests [00m $ ls

et j'ai besoin d'un fichier lisible. Y a-t-il une autre solution connue, comme encodage outputStream, quelque chose?

Merci.

Répondre

1

applications classiques attention à TERM, de sorte que dumb (qui ne pas utiliser la couleur) serait faire ce que vous voulez. Cependant, il existe un certain nombre d'applications codées en dur (aucun commentaire requis).

Certains d'entre eux supprimeront la couleur si vous redirigez la sortie de votre programme vers un fichier, par ex.

foo >bar 

mais beaucoup (probablement la majorité des programmes se conduisant mal) ignorent même cela. Pour contourner ces erreurs, vous devez filtrer les résultats, soit par un script sed ou un programme similaire, soit par (par exemple) capturer la sortie de votre commande en redirigeant ou en utilisant script puis post-traitement le résultat. Par exemple, vous pouvez le faire avec un script quelque chose comme

#!/bin/sh 
myscript=$(mktemp) 
trap "sed -f $myscript typescript; rm -f $myscript typescript" EXIT INT QUIT HUP 
cat >$myscript <<"EOF" 
s/^[[[][<=>?]\{0,1\}[;0-9]*[@-~]//g 
xample: 
s/^[[]][^^[]*^[//g 
s/^[[]][^^[]*^[\\//g 
:loop 
s/[^^[]^[\(.\)/\1/g 
t loop 
s/ *$//g 
s/^.* //g 
s/^[[^[]//g 
/\1/g 
EOF 
script -c "$*" >/dev/null 

qui illustre l'approche. La plupart des paires ^[ dans l'exemple sont des caractères d'échappement ASCII littéraux, que vous ne pourrez pas sélectionner/coller. Le script sed original est ici: script2log

Le point du script est qu'il exécute la commande normalement, puis répercute les résultats du filtre.

+0

Merci. Je vais essayer. –