Цвета с командой unix «смотреть»?


119

Некоторые команды, которые я использую, отображают цвета, но когда я использую их с часами, цвета исчезают:

watch -n 1 node file.js

Можно ли как-нибудь вернуть цвета?


Ответы:


147

Некоторые новые версии watchтеперь поддерживают цвет.

Например watch --color ls -ahl --color.

Связанные .


3
взгляните на: superuser.com/questions/125469/… (первый ответ) - Возможно, вы можете связать его в своем ответе.
aatdark

11
Я пришел сюда , чтобы использовать 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 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возможности, и вы не можете обновить пакет по какой-либо причине, возможно, вы можете добавить это.


8

ДА

часы работают с цветным выводом. это часть пакета procps (по крайней мере, в debian) вот отчет об ошибке для вашего вопроса http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=129334 где они отвечают, что вы должны обновить procps пакет

например, с ubuntu 11.04 этот пакет работает http://packages.debian.org/wheezy/procps

ТЛ; др

обновить процессы


8

Хотя другие ответы решают эту проблему, самый простой способ решить эту проблему - использовать unbufferинструмент. Чтобы использовать это, просто выполните:

$ watch --color 'unbuffer <your-program>'

Таким образом, вам не нужно искать флаги включения управляющей последовательности в вашей программе. Однако есть предостережение: ваша версия часов должна поддерживать --colorфлаг.

Вы можете установить unbuffer в Debian или Ubuntu, используя sudo apt-get install expect.


'unbuffer <command>'- без указания конкретной команды, как это отвечает на вопрос?
Danoram

@Danoram Что для вас непонятно? Вам нужна помощь с заменой <command>конкретной программы, которую вы хотите запустить с цветами?
Авамандер,

@Avamander Я бы написал этот комментарий, потому что вопрос был помечен. Если вы проверите историю изменений, вы увидите, что автор обновил ответ. Ничего непонятного. Мой комментарий просто больше не актуален ..
Данорам

1

Из руководства по часам:

Непечатаемые символы удаляются из вывода программы. Используйте «cat -v» как часть конвейера команд, если хотите их увидеть.

Хотя я не знаю, как им пользоваться.


5
Это заставляет меня видеть управляющие символы в выводе, а не вызывать окраску. Например watch -c "ls --color|cat -v"показывает ^[[0m^[[01;34mAgent^[[0mдля первой строки.
Дрю Ноукс,

1
попробуйтеwatch --color ls --color=always .
Чжан LongQI
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.