При запуске git status -sb
я вижу:
Я хочу watch
(из procps-ng 3.3.3) хранилище. Опция --color
должна сохранять цвета.
Интересно, что он работает с ls
:
$ watch --color "ls --color"
Отображение:
Однако для git
цвета исчезают:
$ watch --color "git status -sb"
<час>
Итак, почему watch
показывает цвета из ls
, но не из git
вывода ?
Следующие утверждения верны:
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.
Я подозреваю, что некоторые приложения смотрят на это (или подобное ) сказать, должны ли они включать цвета или нет.
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
Это работает, если git
(--color
) и watch
(-c
) сказано использовать цвета:
watch -cd "git branch -va --color"