Похоже, что watch
не интерпретирует неявный цветовой код сброса ^[m
.Он интерпретирует явный код ^[0m
.
Кто-нибудь знает, как это исправить?Или это звучит как ошибка, и мне нужно связаться с сопровождающими watch
?
Почему я спрашиваю:
Я использую watch
с git log
, иgit log
использует неявные сбросы ^[m
.
Пример:
$ watch -c git log --oneline --decorate --source --graph --color=always
Как это должно выглядеть так:
$ git log --oneline --decorate --source --graph --color=always
Расследование
Если мы не включим параметр -c
(--color
) в watch
мы можем видеть, что здесь есть escape-коды ANSI:
Every 2.0s: git log --oneline --decorate --source --graph --color=always Fri Sep 28 08:17:42 2018
* ^[33m9db218b^[m HEAD^[33m (^[m^[1;36mHEAD^[m^[33m -> ^[m^[1;32mmaster^[m^[33m, ^[m^[1;33mtag: v0.8.0b5^[m^[33m, ^[m^[1;31morigin/master^[m^[33m, ^[m^[1;31morigin/HEAD^[m^[33m)^[m Doc updates for v0.8.0b5 release
* ^[33mfd342d9^[m HEAD Update changelog [ci skip]
* ^[33md1af865^[m HEAD Update changelog
* ^[33m70889fa^[m HEAD Merge branch 'testing-updates' into 'master'
В приведенном выше примере многое происходит - давайте упростим его:
Докажите, что мы правильно избегаем:
$ echo -e "\033[33myellow\033[mnormal"
Отправьте его на watch
Примечание: аргумент -e
для echo
не анализируетсяпотому что мы цитируем вещи.watch
теперь обрабатывает цветовые коды.
$ watch -c 'echo -e "\033[33myellow\033[mnormal"'
Снимите флаг -c
с watch
$ watch 'echo -e "\033[33myellow\033[mnormal"'
Every 2.0s: echo -e "\033[33myellow\033[mnormal" Fri Sep 28 08:29:26 2018
-e ^[33myellow^[mnormal
Это выглядит как и ожидалось.
Использование явного ^[0m
кода сброса работает
$ watch -c 'echo -e "\033[33myellow\033[0mnormal"'
Версии
В основном тестировался под WSL: Window 10 Pro, v1803, сборка 17134.286
$ watch -v
watch from procps-ng 3.3.10
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.5 LTS
Release: 16.04
Codename: xenial
$ uname -a
Linux redacted-hostname 4.4.0-17134-Microsoft #285-Microsoft Thu Aug 30 17:31:00 PST 2018 x86_64 x86_64 x86_64 GNU/Linux
$ git --version
git version 2.7.4
Также тестировался с использованием PuTTY на машине linux.Та же информация о версии, что и выше, только без использования WSL.