Je suis actuellement en train d'utiliser ce qui suit pour capturer tout ce qui va au terminal et jetez-le dans un fichier journal Cependant, je ne veux pas de couleur de couleur d'évacuation / encombrement aller dans le fichier journal. J'ai donc quelque chose comme celui-ci que sorta fonctionne p> sauf Suivi de Jonathan Leffler's Réponse: p> Compte tenu de l'exemple script La sortie sur le terminal est comme prévu et il n'y a pas de code d'évacuation de couleur / encombrement dans le fichier journal tel que désiré. Toutefois, lors de l'examen Le fichier journal [de mon script Bash actuel] contient la ligne lis code> attend le retour du chariot qui n'est pas idéal pour certaines parties du script (par exemple
echo -n "..." code> ou
printf code> sans
\ n code>). p>
test.sh code>: p>
test.log code>, je ne vois pas le
[lecture] ... code> (voir la ligne 21 de
test.sh code>). < / p> li>
fichier journal: ... code> à la fin de celui-ci, même après la fermeture des 4 et 5 FDS. J'ai pu résoudre le problème en mettant un
Sleep 1 code> avant la seconde
EXEC code> - Je suppose qu'il y a une condition de course ou des shenanigans fd à la blâmer. Malheureusement pour vous les gars, je ne suis pas en mesure de reproduire ce problème avec
test.sh code> mais je serais intéressé par n'importe quelle spéculation que tout le monde peut avoir. P> li>
ol> p>
6 Réponses :
Je sais que ce n'est pas une solution parfaite, mais cat -v code> fera des caractères non visibles tels que
\ x1b code> pour être converti en forme visible comme
^ [[ 1; 34m code>. La sortie sera en désordre, mais ce sera au moins un texte ASCII. P>
Vous pouvez tenter d'utiliser l'option -N pour la lecture. Il se lit en n caractères au lieu d'attendre une nouvelle ligne. Vous pouvez la définir à un. Cela augmenterait le nombre d'itérations que le code fonctionne, mais cela n'attendrait pas les lignes neuves. p>
de l'homme: p>
Remarque: je n'ai pas testé cette p> -N NCHARS Lire les retours après avoir lu des caractères NCHARS plutôt que d'attendre une ligne complète d'entrée. CODE> P>
envisagez d'utiliser le programme Un avantage majeur de ceci est que cela supprimerait le "Execute PEE code> Discuté dans est-il possible de distribuer STDIN sur des processus parallèles . Cela vous permettrait d'envoyer les données du journal via votre script SED, tout en continuant d'envoyer les couleurs à la sortie réelle. P>
sed code> une fois par ligne de sortie de journal"; C'est vraiment diabolique pour la performance (en termes de nombre de processus exécutés, si rien d'autre). p>
excellent! Merci! EXEC 4 <& 1 5 <& 2 1> & 2> &> (TEE -A> (SED -R 'S / \ x1B \ [([0-9] {1,2} (;; {1,2})?)? [M | k] // g '> $ log_file)) code>
Vous pouvez utiliser ANSIFilter pour dépouiller ou transformer la sortie de la console avec des séquences d'échappement ANI. P>
voir http://www.andre-simon.de/zip/download .html # ansifilter p>
J'utilise pour faire des choses comme ceci en définissant Vous pouvez également essayer d'ailleurs, presque tous les programmes terminaux ont une option pour capturer l'entrée et la plupart de la nettoyer pour vous . Quelle plate-forme êtes-vous sur et quel type de programme terminal utilisez-vous? P> p> term = mume code> avant d'exécuter ma commande. C'est à peu près supprimé tous les caractères de contrôle sauf pour TAB, CR et LF. Je ne sais pas si cela fonctionne pour votre situation, mais cela vaut la peine d'essayer. Le problème est que vous ne verrez pas de codages de couleur sur votre terminal, que ce soit un terminal muet.
VIS code> ou
chat code> (surtout le < code> -v code> paramètre) et voyez si ceux-ci font quelque chose pour vous. Vous les mettriez simplement dans votre pipeline comme ceci: p>
ne peut pas Screen -L -L code> ou le script code> code> Les commandes soient viables au lieu de cette boucle EXEC? P>
Pouvons-nous désactiver les caractères de contrôle avec l'écran code>?
Notez que les codes \ e [... m sont spécifiques à VT100 / VT200 / etc. et peut ne pas être ceux qui ont réellement été émis par le programme sur un type différent de $ de mandat.