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

49

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

watch -n 1 node file.js

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

Теги:
watch

5 ответов

60
Лучший ответ

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

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

Связанные.

  • 1
    взгляните на: superuser.com/questions/125469/… (первый ответ) - может быть, вы можете связать это в своем ответе.
  • 6
    Я пришел сюда, чтобы использовать watch с git diff . FWIW, чтобы заставить это работать, вы должны передать в --color=always для git diff (например, watch --color git diff --color=always .
Показать ещё 1 комментарий
9

Вы можете дублировать фундаментальную операцию без излишеств watch в пару строк оболочки script.

$ 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 в этот script, который разделяет управляющие символы, а затем заставляет пользователя использовать --color для отключения этой логики. В настоящее время явная наивность этой реализации держит цветного монстра.

Если вы находитесь в ситуации, когда watch не имеет опции --color, и вы не можете обновить пакет по какой-либо причине, возможно, вы можете это сделать.

  • 0
    это работает, я использую это с шуткой на MacOS.
8

Не используйте watch... Когда вы используете программы просмотра, вы можете обнаружить, что они не пишут на терминал, а затем стирают цвет. Вы должны использовать определенные программные флаги для сохранения там управляющих кодов.

Если вы не знаете флагов или нет, вы можете заставить бедного человека смотреть:

while sleep <time>; do clear; <command>; done

У него будет немного фликер (часы работают "с двойной буферизацией" ), но для некоторых вещей это достаточно полезно.

У вас может возникнуть соблазн сделать двойной буферизированный бедный человек, используя

while sleep <time>; do <command> > /tmp/file; clear; cat /tmp/file; done

Но затем вы снова нажмете функцию "Я не пишу на терминал".

  • 0
    Может быть, использовать while sleep <time>; do clear; <command> | tee /tmp/file; done вместо > а cat ?
  • 0
    ммм я не понимаю @ AndréLeria ... | тройник удалит цветовые коды, как watch , и не предотвращает мерцание команды
Показать ещё 7 комментариев
8

ДА

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

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

ТЛ; дг

update procps

1

Из руководства по эксплуатации:

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

Хотя, я не уверен, как его использовать.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню