Когда я запускаю программу (например, grep
или ls
) без пейджера, ее вывод окрашен. Тем не менее, когда я запускаю его по конвейеру less
, цвета не отображаются.
Например, эта команда выводит цветной вывод:
grep -r something
но это не так:
grep -r something | less
Зачем? Как я могу видеть цвета насквозь less
?
command-line
less
Мохаммед Реза Резвани
источник
источник
grep --color=always "search string" * | less -R
но я склонен использовать вmost
наше время вместоless
. ТАКЖЕ: gnu.org/software/src-highlite - подсветка цвета (работает меньше)python-pygments
?Ответы:
Здесь есть две проблемы:
ls
автоопределение поддержки цвета, не находят поддержку в каналахless
по умолчанию настроено отображение только цветовых кодов.И то и другое можно преодолеть, но это немного неуклюже:
Это не
ls
конкретное. Многие команды, которые поддерживают цвет, также имеют аргумент переопределения.Несколько более глубокий ответ заключается
ls
в проверке того, принадлежит ли его STDOUT реальному терминалу или нет. Когда вы обмениваетесь данными, STDOUT устанавливается на STDIN следующей команды.Вы можете увидеть это на работе в
ls
исходном коде . Он используетisatty
команду (основной интерфейс POSIX), чтобы выяснить, какова ситуация:Цвета включены по умолчанию:
Мы пытаемся вывести в несколько столбцов:
grep
делает очень похожую вещь, если явно не переопределить, он обнаружит поддержку цвета, сisatty
:источник
--color
аргумент:ack-grep -i select --color | less -R
-C
аргументом.Если вам интересны цвета в
less
более общем плане, вы можете посмотреть на нихlesspipe.sh
. Смотрите, например, http://freecode.com/projects/lesspipe .Он также раскрасит сценарии оболочки, Perl-скрипты и т. Д. Аналогично текстовому редактору, но без использования какой-либо программы «предварительной обработки» для раскрашивания.
источник