Я пришел сюда , чтобы использовать watchс git diff. FWIW, чтобы получить, чтобы работать , вы должны перейти в --color=alwaysк git diff(например watch --color git diff --color=always.
theabraham
30
Не использовать watch... Когда вы используете часы, программы могут обнаружить, что они не пишут на терминал, а затем удалить цвет. Вы должны использовать специальные программные флаги, чтобы сохранить там управляющие коды.
Если вы не знаете флагов или их нет, вы можете заставить беднягу смотреть:
while sleep <time>;do clear;<command>;done
Он будет немного мерцать (часы работают с двойной буферизацией), но для некоторых вещей это достаточно полезно.
У вас может возникнуть соблазн сделать часы для бедняков с двойной буферизацией, используя
while sleep <time>;do<command>>/tmp/file; clear; cat /tmp/file;done
Но затем вы снова нажмете на функцию «Я не пишу на терминал».
Может, использовать while sleep <time>; do clear; <command> | tee /tmp/file; doneвместо >и cat?
Андре Лерия
ммм, я не понимаю @ AndréLeria ... | Тройник удалит цветовые коды , как watchделать и не мешает команде из мерцающих
теист
Это предложение для второго примера, который также не дает мне цвета. А может я что то не так делаю?
Андре Лерия
1
@ AndréLeria Второй «пример» - неправильный пример (как сказано в последней строке). Дело в том, что как только вы попадаете в трубу, вы теряете цветовые коды, поскольку вы не пишете на терминал. Именно здесь , чтобы показать , как неправильно, чтобы попытаться компенсировать мерцание из - за временной промежуток между четкими и выполнения целевых команд , используя трубку для работы буферном какwatch
теист
5
В bash: while sleep <time> ; do x="$( <command> 2>&1 )" ; clear ; echo "$x" ; done- Он использует только встроенные функции оболочки для очистки экрана и отображения вывода, поэтому это наименее мерцающая альтернатива.
Géza Török
17
Вы можете продублировать основную операцию без излишеств watchв нескольких строках сценария оболочки.
$ 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
В конце концов, кто-то очень умный взломает trкоманду в этот сценарий, который удаляет управляющие символы, а затем заставляет пользователя использовать --colorэту логику. На данный момент явная наивность этой реализации удерживает монстра, пожирающего цвет.
Если вы находитесь в ситуации, когда у watchвас нет такой --colorвозможности, и вы не можете обновить пакет по какой-либо причине, возможно, вы можете добавить это.
часы работают с цветным выводом. это часть пакета procps (по крайней мере, в debian) вот отчет об ошибке для вашего вопроса http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=129334
где они отвечают, что вы должны обновить procps пакет
Хотя другие ответы решают эту проблему, самый простой способ решить эту проблему - использовать unbufferинструмент. Чтобы использовать это, просто выполните:
$ watch --color 'unbuffer <your-program>'
Таким образом, вам не нужно искать флаги включения управляющей последовательности в вашей программе. Однако есть предостережение: ваша версия часов должна поддерживать --colorфлаг.
Вы можете установить unbuffer в Debian или Ubuntu, используя sudo apt-get install expect.
'unbuffer <command>'- без указания конкретной команды, как это отвечает на вопрос?
Danoram
@Danoram Что для вас непонятно? Вам нужна помощь с заменой <command>конкретной программы, которую вы хотите запустить с цветами?
Авамандер,
@Avamander Я бы написал этот комментарий, потому что вопрос был помечен. Если вы проверите историю изменений, вы увидите, что автор обновил ответ. Ничего непонятного. Мой комментарий просто больше не актуален ..
Данорам
1
Из руководства по часам:
Непечатаемые символы удаляются из вывода программы. Используйте «cat -v» как часть конвейера команд, если хотите их увидеть.
Это заставляет меня видеть управляющие символы в выводе, а не вызывать окраску. Например watch -c "ls --color|cat -v"показывает ^[[0m^[[01;34mAgent^[[0mдля первой строки.
Ответы:
Некоторые новые версии
watch
теперь поддерживают цвет.Например
watch --color ls -ahl --color
.Связанные .
источник
watch
сgit diff
. FWIW, чтобы получить, чтобы работать , вы должны перейти в--color=always
кgit diff
(напримерwatch --color git diff --color=always
.Не использовать
watch
... Когда вы используете часы, программы могут обнаружить, что они не пишут на терминал, а затем удалить цвет. Вы должны использовать специальные программные флаги, чтобы сохранить там управляющие коды.Если вы не знаете флагов или их нет, вы можете заставить беднягу смотреть:
Он будет немного мерцать (часы работают с двойной буферизацией), но для некоторых вещей это достаточно полезно.
У вас может возникнуть соблазн сделать часы для бедняков с двойной буферизацией, используя
Но затем вы снова нажмете на функцию «Я не пишу на терминал».
источник
while sleep <time>; do clear; <command> | tee /tmp/file; done
вместо>
иcat
?watch
делать и не мешает команде из мерцающихwatch
while sleep <time> ; do x="$( <command> 2>&1 )" ; clear ; echo "$x" ; done
- Он использует только встроенные функции оболочки для очистки экрана и отображения вывода, поэтому это наименее мерцающая альтернатива.Вы можете продублировать основную операцию без излишеств
watch
в нескольких строках сценария оболочки.В конце концов, кто-то очень умный взломает
tr
команду в этот сценарий, который удаляет управляющие символы, а затем заставляет пользователя использовать--color
эту логику. На данный момент явная наивность этой реализации удерживает монстра, пожирающего цвет.Если вы находитесь в ситуации, когда у
watch
вас нет такой--color
возможности, и вы не можете обновить пакет по какой-либо причине, возможно, вы можете добавить это.источник
ДА
часы работают с цветным выводом. это часть пакета procps (по крайней мере, в debian) вот отчет об ошибке для вашего вопроса http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=129334 где они отвечают, что вы должны обновить procps пакет
например, с ubuntu 11.04 этот пакет работает http://packages.debian.org/wheezy/procps
ТЛ; др
обновить процессы
источник
Хотя другие ответы решают эту проблему, самый простой способ решить эту проблему - использовать
unbuffer
инструмент. Чтобы использовать это, просто выполните:Таким образом, вам не нужно искать флаги включения управляющей последовательности в вашей программе. Однако есть предостережение: ваша версия часов должна поддерживать
--color
флаг.Вы можете установить unbuffer в Debian или Ubuntu, используя
sudo apt-get install expect
.источник
'unbuffer <command>'
- без указания конкретной команды, как это отвечает на вопрос?<command>
конкретной программы, которую вы хотите запустить с цветами?Из руководства по часам:
Непечатаемые символы удаляются из вывода программы. Используйте «cat -v» как часть конвейера команд, если хотите их увидеть.
Хотя я не знаю, как им пользоваться.
источник
watch -c "ls --color|cat -v"
показывает^[[0m^[[01;34mAgent^[[0m
для первой строки.watch --color ls --color=always .