Przyszedłem tutaj, aby skorzystać watchz git diff. FWIW, aby dostać się do pracy, że trzeba przejść w --color=alwayscelu git diff(np watch --color git diff --color=always.
theabraham
30
Nie używaj watch... Kiedy używasz zegarka, programy mogą wykryć, że nie piszą do terminala, a następnie usuwają kolor. Musisz użyć określonych flag programu, aby zachować tam kody sterujące.
Jeśli nie znasz flag lub ich nie ma, możesz sprawić, by człowiek biedny patrzył:
while sleep <time>;do clear;<command>;done
Będzie miał trochę migotania (zegarek działa „podwójnie buforowany”), ale do niektórych rzeczy jest wystarczający.
Możesz pokusić się o zrobienie zegarka z podwójnym buforowaniem dla biednych ludzi
while sleep <time>;do<command>>/tmp/file; clear; cat /tmp/file;done
Ale wtedy ponownie klikniesz opcję „Nie piszę do terminala”.
Może użyć while sleep <time>; do clear; <command> | tee /tmp/file; donezamiast >i cat?
André Leria
mmm, nie rozumiem tego @ AndréLeria ... | tee usunie kody kolorów, tak jak watchdo, i nie zapobiega migotaniu poleceń
teista
To propozycja na drugi przykład, który również nie daje mi kolorów. A może robię coś źle?
André Leria
1
@ AndréLeria Drugi „przykład” jest złym przykładem (jak powiedziano w ostatniej linii). Chodzi o to, że po trafieniu w rurkę tracisz kody kolorów, ponieważ nie piszesz do terminala. Jest po to, aby pokazać, jak źle jest próbować skompensować migotanie z powodu upływu czasu między wykonaniem polecenia wyczyść a docelowym za pomocą potoku do pracy buforowanej jakwatch
teista
5
W bash: while sleep <time> ; do x="$( <command> 2>&1 )" ; clear ; echo "$x" ; done- Używa tylko wbudowanych poleceń powłoki, aby wyczyścić ekran i wyświetlić dane wyjściowe, dlatego jest najmniej migoczącą alternatywą.
Géza Török
17
Możesz powielić podstawowe, proste działanie watchw kilku liniach skryptu powłoki.
$ 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
W końcu ktoś bardzo sprytny włamie trpolecenie do tego skryptu, który usuwa znaki kontrolne, a następnie zmusi użytkownika --colordo wyłączenia tej logiki. Na razie czysta naiwność tej implementacji powstrzymuje pożerającego kolory potwora.
Jeśli jesteś w sytuacji, w której watchnie masz --coloropcji i nie możesz zaktualizować pakietu z jakiegokolwiek powodu, może możesz to dorzucić.
zegarek działa z wyjściem kolorowym. jest częścią pakietu procps (przynajmniej w debianie) tutaj jest raport o błędzie dla twojego pytania http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=129334
gdzie odpowiadają, że powinieneś zaktualizować procps pakiet
Podczas gdy inne odpowiedzi rozwiązują ten problem, najłatwiejszym sposobem osiągnięcia tego jest użycie unbuffernarzędzia. Aby go użyć, po prostu wykonaj:
$ watch --color 'unbuffer <your-program>'
W ten sposób nie musisz szukać sekwencji sterującej włączającej flagi programu. Zastrzeżenie jest jednak takie, że Twoja wersja zegarka powinna obsługiwać --colorflagę.
Możesz zainstalować unbuffer na Debianie lub Ubuntu za pomocą sudo apt-get install expect.
'unbuffer <command>'- bez wydawania konkretnego polecenia, jak to odpowiada na pytanie?
Danoram
@Danoram Co jest dla Ciebie niejasne? Czy potrzebujesz pomocy w zamianie <command>konkretnego programu, który chcesz uruchomić z kolorami?
Avamander
@Avamander Napisałbym ten komentarz, ponieważ pytanie zostało oflagowane. Jeśli sprawdzisz historię zmian, zobaczysz, że autor zaktualizował odpowiedź. Nic nie jest niejasne. Mój komentarz już nie ma znaczenia ...
Danoram,
1
Z instrukcji zegarka:
Znaki niedrukowalne są usuwane z wyjścia programu. Użyj "cat -v" jako części potoku poleceń, jeśli chcesz je zobaczyć.
Powoduje to, że znaki sterujące są dla mnie widoczne na wyjściu, zamiast powodować przebarwienia. Na przykład watch -c "ls --color|cat -v"pokazuje ^[[0m^[[01;34mAgent^[[0mdla pierwszej linii.
Odpowiedzi:
Niektóre nowsze wersje
watch
obsługują teraz kolor.Na przykład
watch --color ls -ahl --color
.Powiązane .
źródło
watch
zgit diff
. FWIW, aby dostać się do pracy, że trzeba przejść w--color=always
celugit diff
(npwatch --color git diff --color=always
.Nie używaj
watch
... Kiedy używasz zegarka, programy mogą wykryć, że nie piszą do terminala, a następnie usuwają kolor. Musisz użyć określonych flag programu, aby zachować tam kody sterujące.Jeśli nie znasz flag lub ich nie ma, możesz sprawić, by człowiek biedny patrzył:
Będzie miał trochę migotania (zegarek działa „podwójnie buforowany”), ale do niektórych rzeczy jest wystarczający.
Możesz pokusić się o zrobienie zegarka z podwójnym buforowaniem dla biednych ludzi
Ale wtedy ponownie klikniesz opcję „Nie piszę do terminala”.
źródło
while sleep <time>; do clear; <command> | tee /tmp/file; done
zamiast>
icat
?watch
do, i nie zapobiega migotaniu poleceńwatch
while sleep <time> ; do x="$( <command> 2>&1 )" ; clear ; echo "$x" ; done
- Używa tylko wbudowanych poleceń powłoki, aby wyczyścić ekran i wyświetlić dane wyjściowe, dlatego jest najmniej migoczącą alternatywą.Możesz powielić podstawowe, proste działanie
watch
w kilku liniach skryptu powłoki.W końcu ktoś bardzo sprytny włamie
tr
polecenie do tego skryptu, który usuwa znaki kontrolne, a następnie zmusi użytkownika--color
do wyłączenia tej logiki. Na razie czysta naiwność tej implementacji powstrzymuje pożerającego kolory potwora.Jeśli jesteś w sytuacji, w której
watch
nie masz--color
opcji i nie możesz zaktualizować pakietu z jakiegokolwiek powodu, może możesz to dorzucić.źródło
TAK
zegarek działa z wyjściem kolorowym. jest częścią pakietu procps (przynajmniej w debianie) tutaj jest raport o błędzie dla twojego pytania http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=129334 gdzie odpowiadają, że powinieneś zaktualizować procps pakiet
np. z ubuntu 11.04 ten pakiet działa http://packages.debian.org/wheezy/procps
tl; dr
aktualizacja procps
źródło
Podczas gdy inne odpowiedzi rozwiązują ten problem, najłatwiejszym sposobem osiągnięcia tego jest użycie
unbuffer
narzędzia. Aby go użyć, po prostu wykonaj:W ten sposób nie musisz szukać sekwencji sterującej włączającej flagi programu. Zastrzeżenie jest jednak takie, że Twoja wersja zegarka powinna obsługiwać
--color
flagę.Możesz zainstalować unbuffer na Debianie lub Ubuntu za pomocą
sudo apt-get install expect
.źródło
'unbuffer <command>'
- bez wydawania konkretnego polecenia, jak to odpowiada na pytanie?<command>
konkretnego programu, który chcesz uruchomić z kolorami?Z instrukcji zegarka:
Znaki niedrukowalne są usuwane z wyjścia programu. Użyj "cat -v" jako części potoku poleceń, jeśli chcesz je zobaczyć.
Chociaż nie jestem pewien, jak go używać.
źródło
watch -c "ls --color|cat -v"
pokazuje^[[0m^[[01;34mAgent^[[0m
dla pierwszej linii.watch --color ls --color=always .