Telegram Group & Telegram Channel
📌 Рубрика "Надо было знать, но я не знал"

Всегда писал:

grep ... | less

и грустил, потому что grep выводит цветной текст, а в less всё становится монохромным.

Думал, что это less тупой. Оказалось, что не он, а я.

Но почему?

grep, как и многие другие Unix-утилиты (ls, diff, ripgrep и т. д.), проверяет, является ли стандартный вывод (stdout) терминалом и в зависимости от этого включает или выключает цвета.

Это логично: чтобы выделить слово цветом, в терминале нужно добавить специальные управляющие последовательности в начало и в конец. Эти символы интерпретируются терминалом, но не нужны в файле или пайпе.

Такая проверка выполняется с помощью isatty(3):

isatty(STDOUT_FILENO)

Этот функция возвращает 1, если вывод идёт в терминал, и 0, если в файл или пайп. Если isatty возвращает 0, утилита отключает цвет.

Нашёл даже коммит, в котором этот функционал добавили в grep:
🔗 Коммит в grep

Как спастись?

Чтобы grep, ripgrep, ls, diff и другие челы не отключали цвета при передаче вывода в less, нужно явно указать, что цвет всегда должен быть включен:

grep --color=always ... | less

(Вроде как надо еще -R добавлять к less, но у меня и без этого работает 🤔)

При этом опасно добавлять --color=always в алиасы, потому что это может поломать разные скрипты, которые используют grep.
(спасибо @asokol123, теперь я еще знаю, что алиасы не пролезают в скрипты)

Надеюсь, кому-то теперь тоже станет проще жить)

🔗 Обсуждение на SuperUser



group-telegram.com/misha_writes_code/217
Create:
Last Update:

📌 Рубрика "Надо было знать, но я не знал"

Всегда писал:

grep ... | less

и грустил, потому что grep выводит цветной текст, а в less всё становится монохромным.

Думал, что это less тупой. Оказалось, что не он, а я.

Но почему?

grep, как и многие другие Unix-утилиты (ls, diff, ripgrep и т. д.), проверяет, является ли стандартный вывод (stdout) терминалом и в зависимости от этого включает или выключает цвета.

Это логично: чтобы выделить слово цветом, в терминале нужно добавить специальные управляющие последовательности в начало и в конец. Эти символы интерпретируются терминалом, но не нужны в файле или пайпе.

Такая проверка выполняется с помощью isatty(3):

isatty(STDOUT_FILENO)

Этот функция возвращает 1, если вывод идёт в терминал, и 0, если в файл или пайп. Если isatty возвращает 0, утилита отключает цвет.

Нашёл даже коммит, в котором этот функционал добавили в grep:
🔗 Коммит в grep

Как спастись?

Чтобы grep, ripgrep, ls, diff и другие челы не отключали цвета при передаче вывода в less, нужно явно указать, что цвет всегда должен быть включен:

grep --color=always ... | less

(Вроде как надо еще -R добавлять к less, но у меня и без этого работает 🤔)

При этом опасно добавлять --color=always в алиасы, потому что это может поломать разные скрипты, которые используют grep.
(спасибо @asokol123, теперь я еще знаю, что алиасы не пролезают в скрипты)

Надеюсь, кому-то теперь тоже станет проще жить)

🔗 Обсуждение на SuperUser

BY Миша пишет код




Share with your friend now:
group-telegram.com/misha_writes_code/217

View MORE
Open in Telegram


Telegram | DID YOU KNOW?

Date: |

In the United States, Telegram's lower public profile has helped it mostly avoid high level scrutiny from Congress, but it has not gone unnoticed. The Russian invasion of Ukraine has been a driving force in markets for the past few weeks. "The result is on this photo: fiery 'greetings' to the invaders," the Security Service of Ukraine wrote alongside a photo showing several military vehicles among plumes of black smoke. But Kliuchnikov, the Ukranian now in France, said he will use Signal or WhatsApp for sensitive conversations, but questions around privacy on Telegram do not give him pause when it comes to sharing information about the war. Lastly, the web previews of t.me links have been given a new look, adding chat backgrounds and design elements from the fully-features Telegram Web client.
from us


Telegram Миша пишет код
FROM American