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 2014, Pavel Durov fled the country after allies of the Kremlin took control of the social networking site most know just as VK. Russia's intelligence agency had asked Durov to turn over the data of anti-Kremlin protesters. Durov refused to do so. Anastasia Vlasova/Getty Images "He has to start being more proactive and to find a real solution to this situation, not stay in standby without interfering. It's a very irresponsible position from the owner of Telegram," she said. Oleksandra Matviichuk, a Kyiv-based lawyer and head of the Center for Civil Liberties, called Durov’s position "very weak," and urged concrete improvements. "He has kind of an old-school cyber-libertarian world view where technology is there to set you free," Maréchal said.
from it


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