Кольори з командою unix "дивитися"?


117

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

watch -n 1 node file.js

Чи можна якось повернути кольори?


Відповіді:


145

Деякі новіші версії 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

31

Не використовуйте 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 ... | Трійник видалить кольорові коди, як watchdo, і не перешкоджає мерехтінню команди
theist

Це пропозиція для другого прикладу, який також не дає мені кольорів. А може, я роблю щось не так?
Андре Лерія

1
@ AndréLeria Другий "приклад" - неправильний приклад (як сказано в рядку "las"). Справа в тому, що потрапивши в трубу, ви втрачаєте кольорові коди, оскільки не пишете на термінал. Саме там, щоб показати, як неправильно намагатися компенсувати мерехтіння через проміжок часу між чіткою та цільовою командою, використовуючи трубу, щоб працювати як буферwatch
теїст

4
В основному: while sleep <time> ; do x="$( <command> 2>&1 )" ; clear ; echo "$x" ; done- Для очищення екрана та відображення виводу використовується лише вбудована оболонка, тому є найменш мерехтливою альтернативою.
Géza Török

18

Ви можете дублювати основні операції без зайвих помилок 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

ТАК

годинник працює з кольоровим виходом. це частина пакету propps (принаймні, в debian). Тут ви знайдете помилку на ваше запитання http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=129334, де вони відповідають, вам слід оновити програму. пакет

наприклад, з 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 Що для тебе незрозуміло? Вам потрібна допомога щодо заміни <command>конкретної програми, яку ви хочете запустити кольорами?
Avamander

@Avamander Я б написав цей коментар, тому що питання було позначено позначкою. Якщо ви перевірите історію редагування, ви побачите, що автор оновив відповідь. Нічого незрозумілого. Мій коментар просто більше не стосується ..
Danoram

1

З посібника для перегляду:

Символи, що не друкуються, вилучаються з програмного виводу. Використовуйте "cat -v" як частину командного конвеєра, якщо ви хочете їх бачити.

Хоча я не впевнений, як ним користуватися.


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

1
спробуйтеwatch --color ls --color=always .
Чжан Лонгкі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.