Немає кольорового виводу менше для команди ls


21

Якщо я запускаю, lsя отримую кольоровий вихід, який мені здається досить зручним для швидкого огляду виду файлу. Коли я намагаюся передати це lessрівномірно -rі -Rпрапорами, забарвлення завжди втрачається. Я використовую zshверсію 5.0.7. Будь-які ідеї? Спасибі.

редагувати: Я в ОС X.


Чи можете ви підтвердити ls, що вас викликають --color? Спробуйте призупинити трубопровід ( ^Z) або використовувати psінший термінал. Який вихід дає which ls?
zackse

Я очистив це з less -rчергової черги, оскільки ОП чітко заявила, що вони використовують, тому це не проблема, lessа зls
terdon

Я здивований, що це ще не дублікат, але найближчим, який я міг знайти, було виведення команд Store у змінній , і це на Super User.
Скотт

@Scott Я не впевнений, чи є точний дублікат, але є деякі питання, на відповідь яких дуже схожий ( lsрезультат залежить від stdout). Я пам'ятаю unix.stackexchange.com/questions/157285/…, який позначається як дублікат unix.stackexchange.com/questions/10421/…
jimmij

@jimmij Але ці питання не згадують, що ls --color=autoозначає використання кольору лише під час запису в термінал (тобто, коли стандартний вихід є терміналом), а не тоді, коли це файл чи труба.
Скотт

Відповіді:


21

Це задумано: програми, які виробляють кольоровий вихід, зазвичай роблять це лише тоді, коли їх вихід надходить до терміналу, а не тоді, коли він надсилається в трубу або в звичайний файл. Причина полягає в тому, що дані, що надсилаються на термінал, імовірно, читаються людиною, тоді як дані, передані в програму або записані у файл, швидше за все, будуть розбиратися якоюсь програмою, тому вони не повинні містити сторонній вміст, наприклад, зміни кольору, що змінюються кольором .

GNU lsвідображає кольоровий вихід на терміналі, коли ви передаєте параметр --color(або --color=auto). Щоб примусити кольоровий вихід незалежно від типу файлу стандартного виводу, передайте --color=alwaysабо --color=yes(вони є синонімами). Цю конвенцію дотримуються й інші команди, такі як GNU grep, greb FreeBSD git diffтощо.

ls --colors=yes -l | less

З версією FreeBSD ls(також зустрічається на OSX та доступний як colorlsпорт на OpenBSD та NetBSD) передайте опцію -Gдля відображення кольорів, коли вихід є терміналом. Встановіть середовище CLICOLOR_FORCEдля відображення кольорів незалежно від типу вихідного файлу.

CLICOLOR_FORCE=1 ls -l | less

20

Найімовірніше, проблема полягає в тому, що у вашій lsпрограмі встановлено параметр, --color=autoякий в основному означає, що вихід повинен бути кольоровим лише в тому випадку, якщо він підключений до терміналу, інакше (вихід підключений до труби або файлу) не виділяються кольори.

Якщо ви хочете мати кольори - це такі випадки, вам слід встановити --colorваріант always, тому спробуйте

ls --color=always | less -R

Якщо така поведінка ви очікуєте весь час, тоді просто створіть псевдонім:

alias ls='ls --color=always'

У моїх налаштуваннях, bash версії 4.3, --color є незаконним варіантом. Привітання для "кольору" повідомляє мені про "-G" варіант, але нічого не говорить про автоматичний або завжди варіант. Будь-які ідеї?
nunos

5
@nunos lsне походить bash, це окрема програма. Запустіть, ls --versionщоб перевірити його версію. Шахта є GNU coreutils) 8.21 .
jimmij

@jimiij у моїй lsверсії немає --versionпрапора. Я використовую за замовчуванням OS X, не впевнений, чи допомагає це.
nunos

@nunos, будь ласка, завжди вказуйте вашу операційну систему. Є величезні відмінності між Linux і не-GNU ніксами, такими як OSX.
тердон

0

Я не можу коментувати відповідь @jimmij, тому що у мене менше 50 повторів, але я хотів би пояснити, що працювало на мене в Bash.

Якщо ти біжиш

$ man ls | grep color

ви побачите всі записи сторінки manна вашому конкретному середовищі оболонки (в нашому випадку bash).

Для мене наступне коригування зробило трюк:

$ alias ls='ls -G'

3
Що для чого працювало? -GПрапор не має нічого спільного з тим, як lsуправляє кольоровий висновок. Це просто видаляє групи з результатів ls -l. Це впливає на кольоровий вихід у BSD ls (той, що використовується і на OSX), це те, що ви маєте на увазі? У будь-якому випадку, я не думаю, що колір буде показаний при переадресації до файлу, він просто покаже колір у командному рядку.
terdon
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.