Некоторые команды, которые я использую, отображают цвета, но когда я использую их с часами, цвета исчезают:
watch -n 1 node file.js
Можно ли как-нибудь вернуть цвета?
Некоторые команды, которые я использую, отображают цвета, но когда я использую их с часами, цвета исчезают:
watch -n 1 node file.js
Можно ли как-нибудь вернуть цвета?
Ответы:
Некоторые новые версии 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>; done
Он будет немного мерцать (часы работают с двойной буферизацией), но для некоторых вещей это достаточно полезно.
У вас может возникнуть соблазн сделать часы для бедняков с двойной буферизацией, используя
while sleep <time>; do <command> > /tmp/file; clear; cat /tmp/file; done
Но затем вы снова нажмете на функцию «Я не пишу на терминал».
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
в нескольких строках сценария оболочки.
$ 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
В конце концов, кто-то очень умный взломает 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
инструмент. Чтобы использовать это, просто выполните:
$ watch --color 'unbuffer <your-program>'
Таким образом, вам не нужно искать флаги включения управляющей последовательности в вашей программе. Однако есть предостережение: ваша версия часов должна поддерживать --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 .