2010-09-25 5 views
51

Certaines commandes que j'utilise des couleurs d'affichage, mais quand je les utilise avec montre les couleurs disparait:Couleurs avec commande unix "watch"?

watch -n 1 node file.js 

Est-il possible d'avoir les couleurs en arrière sur une certaine façon?

+0

duplication possible de [Comment est-ce que je peux faire interpréter la commande de surveillance interpréter des séquences vt100?] (Http://stackoverflow.com/questions/2417824/how-can--make-the-watch-command-interpret-vt100- séquences) – l0b0

Répondre

64

Certaines versions plus récentes de watch prennent désormais en charge la couleur.

Par exemple watch --color ls -ahl --color.

Related.

+1

jetez un oeil à: http://superuser.com/questions/125469/bash-watch-command-with-colors-preserved (première réponse) - Peut-être que vous pouvez le lier dans votre réponse. – aatdark

+6

Je suis venu ici pour utiliser 'watch' avec' git diff'. FWIW, pour que cela fonctionne, vous devez passer '--color = always' à' git diff' (par exemple 'watch --color git diff --color = always') – theabraham

+0

En d'autres termes:" Watch * does * travailler avec la sortie couleur " – nobar

1

De manuel montre:

caractères non-impression sont supprimés de la sortie du programme. Utilisez "cat -v" dans le pipeline de commandes si vous voulez les voir.

Cependant, je ne suis pas sûr de savoir comment l'utiliser.

+4

Cela provoque les caractères de contrôle pour être visible dans la sortie pour moi, plutôt que de provoquer la coloration. Par exemple 'watch -c" ls --color | cat -v "' montre '^ [[0m^[[01; 34mAgent^[[0m' pour la première ligne. –

11

Vous pouvez dupliquer la base, le fonctionnement sans fioritures de watch dans quelques lignes de script shell.

$ cat cheapwatch 
#!/bin/sh 

# Not quite your Rolex 

while true ; do 
    clear 
    printf "[%s] Output of %s:\n" "$(date)" "$*" 
    # "[email protected]" <- we don't want to do it this way, just this: 
    ${SHELL-/bin/sh} -c "$*" 
    sleep 1 # genuine Quartz movement 
done 

$ ./cheapwatch ls --color # no problem 

Finalement, quelqu'un de très intelligent va pirater une commande tr dans ce script qui bandes caractères de contrôle, puis forcer l'utilisateur à utiliser --color pour désactiver cette logique. Pour le moment, la pure naïveté de cette mise en œuvre est de garder le monstre mangeur de couleurs loin.

Si vous êtes dans une situation où watch n'a pas l'option --color et vous ne pouvez pas mettre le paquet pour une raison quelconque, peut-être que vous pouvez jeter dans ce.

9

Ne pas utiliser watch ... Lorsque vous utilisez les programmes de surveillance, ils peuvent détecter qu'ils n'écrivent pas sur un terminal, puis dépouiller la couleur. Vous devez utiliser des indicateurs de programme spécifiques pour conserver les codes de contrôle.

Si vous ne connaissez pas les drapeaux ou il n'y a pas que vous pouvez faire par la montre de l'homme d'un pauvre:

while sleep <time>; do clear; <command>; done 

Il aura un peu de scintillement (montre fonctionne « double tampon ») mais pour quelques trucs c'est assez utile.

Vous pourriez être tenté de faire une montre le double tampon pauvre en utilisant

while sleep <time>; do <command> > /tmp/file; clear; cat /tmp/file; done 

Mais alors vous allez frapper à nouveau le « Je ne suis pas en train d'écrire à un terminal » caractéristique.

+0

Peut-être utiliser' while sleep

+0

mmm Je ne comprends pas @ AndréLeria ... | tee enlèvera les codes couleurs comme 'watch' et n'empêchera pas la commande de scintiller – theist

+0

C'est une suggestion pour le second exemple, qui ne me donne pas non plus de couleurs. –