Certaines commandes que j'utilise affichent des couleurs, mais lorsque je les utilise avec watch, les couleurs disparaissent:
watch -n 1 node file.js
Est-il possible de rétablir les couleurs d'une manière ou d'une autre?
Certaines commandes que j'utilise affichent des couleurs, mais lorsque je les utilise avec watch, les couleurs disparaissent:
watch -n 1 node file.js
Est-il possible de rétablir les couleurs d'une manière ou d'une autre?
Réponses:
Certaines versions plus récentes de watch
prennent désormais en charge la couleur.
Par exemple watch --color ls -ahl --color
.
Connexes .
watch
avec git diff
. FWIW, pour obtenir que vous devez travailler passer --color=always
à git diff
(par exemple watch --color git diff --color=always
.
Ne pas utiliser watch
... Lorsque vous utilisez la montre, les programmes peuvent détecter qu'ils n'écrivent pas sur un terminal, puis supprimer la couleur. Vous devez utiliser des indicateurs de programme spécifiques pour y conserver les codes de contrôle.
Si vous ne connaissez pas les drapeaux ou qu'il n'y en a pas, vous pouvez faire regarder un pauvre en:
while sleep <time>; do clear; <command>; done
Il aura un peu de scintillement (la montre fonctionne "double buffered") mais pour certains trucs c'est assez utile.
Vous pourriez être tenté de fabriquer une montre de pauvre à double tampon en utilisant
while sleep <time>; do <command> > /tmp/file; clear; cat /tmp/file; done
Mais ensuite, vous frapperez à nouveau la fonction "Je n'écris pas sur un terminal".
while sleep <time>; do clear; <command> | tee /tmp/file; done
place de >
et cat
?
watch
do et n'empêchera pas la commande de scintiller
watch
while sleep <time> ; do x="$( <command> 2>&1 )" ; clear ; echo "$x" ; done
- Il n'utilise que les fonctions internes du shell pour effacer l'écran et afficher la sortie, étant donc l'alternative la moins scintillante.
Vous pouvez dupliquer l'opération fondamentale et 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)" "$*"
# "$@" <- 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 piratera une tr
commande dans ce script qui supprime les caractères de contrôle, puis forcera l'utilisateur à utiliser --color
pour désactiver cette logique. Pour le moment, la pure naïveté de cette mise en œuvre éloigne le monstre mangeur de couleurs.
Si vous êtes dans une situation où watch
vous n'avez pas l' --color
option et que vous ne pouvez pas mettre à niveau le package pour une raison quelconque, vous pouvez peut-être le faire.
OUI
la montre fonctionne avec une sortie couleur. il fait partie du paquet procps (au moins dans debian) voici le rapport de bogue pour votre question http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=129334 où ils répondent, que vous devriez mettre à jour le procps paquet
par exemple avec ubuntu 11.04 ce paquet fonctionne http://packages.debian.org/wheezy/procps
tl; dr
mise à jour des procps
Bien que d'autres réponses résolvent ce problème, le moyen le plus simple d'y parvenir est d'utiliser l' unbuffer
outil. Pour l'utiliser, faites simplement:
$ watch --color 'unbuffer <your-program>'
De cette façon, vous n'avez pas à rechercher les séquences de contrôle activant les indicateurs de votre programme. La mise en garde cependant est que votre version de la montre doit prendre en charge le --color
drapeau.
Vous pouvez installer un buffer sur Debian ou Ubuntu en utilisant sudo apt-get install expect
.
'unbuffer <command>'
- sans donner une commande spécifique à utiliser comment cela répond-il à la question?
<command>
par le programme spécifique que vous souhaitez exécuter avec des couleurs?
À partir du manuel de la montre:
Les caractères non imprimables sont supprimés de la sortie du programme. Utilisez "cat -v" dans le cadre du pipeline de commandes si vous voulez les voir.
Cependant, je ne sais pas comment l'utiliser.
watch -c "ls --color|cat -v"
montre ^[[0m^[[01;34mAgent^[[0m
pour la première ligne.
watch --color ls --color=always .