«watch» не интерпретирует неявный цветовой код «reset» `^ [m` - PullRequest
0 голосов
/ 28 сентября 2018

Похоже, что watch не интерпретирует неявный цветовой код сброса ^[m.Он интерпретирует явный код ^[0m.

Кто-нибудь знает, как это исправить?Или это звучит как ошибка, и мне нужно связаться с сопровождающими watch?

Почему я спрашиваю:

Я использую watch с git log, иgit log использует неявные сбросы ^[m.

Пример:

$ watch -c git log --oneline --decorate --source --graph --color=always

showing the issue

Как это должно выглядеть так:

$ git log --oneline --decorate --source --graph --color=always

expected

Расследование

Если мы не включим параметр -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"

simple echo color escaping

Отправьте его на watch

Примечание: аргумент -e для echo не анализируетсяпотому что мы цитируем вещи.watch теперь обрабатывает цветовые коды.

$ watch -c 'echo -e "\033[33myellow\033[mnormal"'

watch fails with the reset code

Снимите флаг -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"'

enter image description here

Версии

В основном тестировался под 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.

1 Ответ

0 голосов
/ 28 сентября 2018

Похоже, что это было исправлено в версии 3.3.12 из procps, которая содержит watch:

https://gitlab.com/procps-ng/procps/issues/12

https://gitlab.com/procps-ng/procps/commit/6fcb690099bd681930946492e8a93c61e82249d8

...