Почему при использовании часов не отображаются мерзкие цвета?

При запуске git status -sb я вижу:

enter image description here

Я хочу watch (из procps-ng 3.3.3) хранилище. Опция --color должна сохранять цвета.


Интересно, что он работает с ls:

$ watch --color "ls --color"

Отображение:

output from ls


Однако для git цвета исчезают:

$ watch --color "git status -sb"

enter image description here

<час>

Итак, почему watch показывает цвета из ls, но не из git вывода ?

9
задан 20 February 2014 в 18:46

3 ответа

Следующие утверждения верны:

  • watch запускает команду в новой оболочке, sh.
  • .bashrc псевдонимы ls как ls --color=auto для включения цветов
  • sh не наследуют и не используют bash псевдонимов.

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

Рабочий пример для ls:

watch --colour -- ls --color=always

Если вы не передадите --color, чтобы посмотреть, вы увидите ряд уродливых цветовых кодов в строке.


ls --color интерпретируется как ls --colour=always.

ls --colour=auto не печатает цвет в часах. Это говорит о том, что он выводит цветовую поддержку из самого терминала.

Подробнее о причине, по которой мы можем проверить, считает ли оболочка часов реальный терминал :

$ bash -c '[[ -t 1 ]] && echo "real terminal"'
real terminal

$ watch -- "bash -c '[[ -t 1 ]] && echo "real terminal"'"
# ... nothing.

Я подозреваю, что некоторые приложения смотрят на это (или подобное ) сказать, должны ли они включать цвета или нет.

0
ответ дан 20 February 2014 в 18:46

git использует значение конфигурации, чтобы определить, показывать ли цветной вывод или нет.

Например:

git config --global color.ui auto

Это устанавливает настройку цвета на auto во всем мире. В режиме auto git определит, является ли это реальным терминалом, перед отправкой цветовых кодов, как предположил Оли.

Вы можете принудительно установить это глобальное значение на always, однако лучшей идеей может быть применение его к определенной команде:

git -c color.status=always status -sb

Объединение всего этого:

watch --color git -c color.status=always status -sb
0
ответ дан 20 February 2014 в 18:46

Это работает, если git (--color) и watch (-c) сказано использовать цвета:

watch -cd "git branch -va --color"
0
ответ дан 20 February 2014 в 18:46

Другие вопросы по тегам:

Похожие вопросы: