Je suis venu ici pour utiliser watchavec git diff. FWIW, pour obtenir que vous devez travailler passer --color=alwaysà git diff(par exemple watch --color git diff --color=always.
theabraham
30
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".
Peut-être utiliser à la while sleep <time>; do clear; <command> | tee /tmp/file; doneplace de >et cat?
André Leria
mmm je ne comprends pas @ AndréLeria ... | tee supprimera les codes de couleur comme watchdo et n'empêchera pas la commande de scintiller
theist
C'est une suggestion pour le deuxième exemple, qui ne me donne pas non plus de couleurs. Ou peut-être que je fais quelque chose de mal?
André Leria
1
@ AndréLeria Le deuxième "exemple" est un mauvais exemple (comme il est dit dans la ligne las). Le fait est qu'une fois que vous frappez un tube, vous perdez les codes de couleur car vous n'écrivez pas sur un terminal. Il est là pour montrer à quel point il est faux d'essayer de compenser le scintillement dû au laps de temps entre l'exécution de la commande clear et cible en utilisant un tube pour travailler tamponné commewatch
theist
5
En bash: 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.
Géza Török
17
Vous pouvez dupliquer l'opération fondamentale et sans fioritures de watchdans quelques lignes de script shell.
$ cat cheapwatch
#!/bin/sh# Not quite your Rolexwhile 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 movementdone
$ ./cheapwatch ls --color # no problem
Finalement, quelqu'un de très intelligent piratera une trcommande dans ce script qui supprime les caractères de contrôle, puis forcera l'utilisateur à utiliser --colorpour 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ù watchvous n'avez pas l' --coloroption et que vous ne pouvez pas mettre à niveau le package pour une raison quelconque, vous pouvez peut-être le faire.
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
Bien que d'autres réponses résolvent ce problème, le moyen le plus simple d'y parvenir est d'utiliser l' unbufferoutil. 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 --colordrapeau.
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?
Danoram du
@Danoram Qu'est-ce qui n'est pas clair pour vous? Avez-vous besoin d'aide pour remplacer <command>par le programme spécifique que vous souhaitez exécuter avec des couleurs?
Avamander
@Avamander J'aurais écrit ce commentaire parce que la question a été signalée. Si vous vérifiez l'historique des modifications, vous verrez que l'auteur a mis à jour la réponse. Rien n'est clair. Mon commentaire n'est tout simplement plus pertinent ..
Danoram
1
À 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.
Cela fait que les caractères de contrôle sont visibles pour moi dans la sortie, plutôt que de provoquer une coloration. Par exemple watch -c "ls --color|cat -v"montre ^[[0m^[[01;34mAgent^[[0mpour la première ligne.
Réponses:
Certaines versions plus récentes de
watch
prennent désormais en charge la couleur.Par exemple
watch --color ls -ahl --color
.Connexes .
la source
watch
avecgit diff
. FWIW, pour obtenir que vous devez travailler passer--color=always
àgit diff
(par exemplewatch --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:
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
Mais ensuite, vous frapperez à nouveau la fonction "Je n'écris pas sur un terminal".
la source
while sleep <time>; do clear; <command> | tee /tmp/file; done
place de>
etcat
?watch
do et n'empêchera pas la commande de scintillerwatch
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.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.la source
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
la source
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: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
.la source
'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.
la source
watch -c "ls --color|cat -v"
montre^[[0m^[[01;34mAgent^[[0m
pour la première ligne.watch --color ls --color=always .