Если я запускаю, ls
я получаю цветной вывод, который я нахожу довольно удобным для быстрого получения вида файла. Когда я пытаюсь трубы этом less
даже с -r
и -R
флагами красящей всегда выпадали. Я использую zsh
версию 5.0.7. Любые идеи? Спасибо.
редактировать: я на OS X.
ls
, что вызывается с--color
? Попробуйте приостановить конвейер (^Z
) или использоватьps
другой терминал. Какой выходwhich ls
производит?less -r
так что это не проблема,less
но сls
ls
результат зависит от стандартного вывода). Я помню один unix.stackexchange.com/questions/157285/…, который помечен как дубликат unix.stackexchange.com/questions/10421/…ls --color=auto
означает использовать цвет только при записи в терминал (т. е. когда стандартный вывод является терминалом), а не когда это файл или канал.Ответы:
Это сделано специально: программы, которые выдают цветной вывод, обычно делают это только тогда, когда их вывод поступает на терминал, а не когда они отправляются в канал или в обычный файл. Причина в том, что данные, отправленные на терминал, предположительно считываются человеком, тогда как данные, переданные в программу или записанные в файл, вероятно, будут проанализированы какой-либо программой, поэтому они не должны содержать постороннего содержимого, такого как изменяющие цвет escape-последовательности ,
GNU
ls
отображает цветной вывод на терминале, когда вы передаете опцию--color
(или--color=auto
). Чтобы вызвать цветной вывод независимо от типа файла стандартного вывода, передайте--color=always
или--color=yes
(это синонимы). За этим соглашением следовали другие команды, такие как GNU grep, FreeBSD grepgit diff
и т. Д.В версии FreeBSD
ls
(также найденной в OSX и доступной какcolorls
порт в OpenBSD и NetBSD), пропустите опцию-G
для отображения цветов, когда вывод является терминалом. Установите средуCLICOLOR_FORCE
для отображения цветов независимо от типа выходного файла.источник
Проблема, скорее всего, состоит в том, что ваша
ls
программа имеет установленную опцию,--color=auto
которая в основном означает, что вывод должен быть окрашен только в том случае, если он подключен к терминалу, в противном случае (вывод, подключенный к каналу или файлу) никакие цвета не излучаются.Если вы хотите, чтобы цвета были в таких случаях, вы должны установить
--color
опциюalways
, поэтому попробуйтеЕсли вы ожидаете такого поведения все время, просто создайте псевдоним:
источник
ls
не приходитbash
, это отдельная программа. Запустите,ls --version
чтобы проверить его версию. Мой - ls GNU coreutils) 8.21 .ls
версии нет--version
флага. Я использую по умолчанию один из OS X, не уверен, поможет ли это.Я не могу комментировать ответ @jimmij, потому что у меня менее 50 представителей, но я хотел бы объяснить, что сработало для меня в Bash.
Если вы бежите
вы увидите все записи
man
-page для вашей конкретной среды оболочки (в нашем случаеbash
).Для меня следующие настройки сделали свое дело:
источник
-G
Флаг не имеет ничего общего с тем, какls
управляет цветной вывод. Это просто удаляет группы из выводаls -l
. Это влияет на вывод цвета в BSD ls (который также используется в OSX), это то, что вы имеете в виду? В любом случае, я не думаю, что при перенаправлении в файл будет отображаться цвет, он будет отображаться в командной строке.