Как отключить цвет с помощью `ls`?

50

Это , как правило , приятно иметь цвет вывода ls, grepи т.д. Но если вы не хотите (например, в сценарии , где вы конвейер результатов в другую команду) есть переключатель , который может отключить его? ls -Gвключает его (в некоторых версиях BSD ls), если он не используется по умолчанию, но ls +Gне выключает его. Есть ли что-нибудь еще, что будет?

иконоборец
источник
4
Поздно, но для тех, кто ищет: для GNU ls и для grepконвейера вам не нужно ничего делать, потому что --color=autoуже отключается раскраска, когда его вывод представляет собой конвейер, или фактически что-либо, кроме tty; это то, что означает «авто». Точно так же FreeBSD ls -Gили CLICOLOR отключены, если вывод не направлен на терминал, если только ... CLICOLOR_FORCE ... '.
dave_thompson_085

Ответы:

70

В lsбольшинстве дистрибутивов цветовой вывод для обычно включается через псевдоним.

$ alias ls
alias ls='ls --color=auto'

Вы всегда можете временно отключить псевдоним, поставив перед ним обратную косую черту.

$ \ls

Выполнение вышеизложенного приведет к короткому замыканию псевдонима только для этого вызова. Вы можете использовать его в любое время, когда хотите отключить любой псевдоним.

SLM
источник
3
Вы также можете использовать command ls, конечно, но это немного быстрее.
иконоборчество
Аккуратный трюк! Нужно обновить скрипты, чтобы иметь ведущий ``.
Viet
1
Мне очень понравился \ ls
Алекс Анджелико
27

С помощью GNU lsвы можете ls --color=neverявно отключить вывод цвета. (Даже если у вас есть alias ls='ls --color=auto', при запуске ls --color=neverон расширится до ls --color=auto --color=never, и более поздняя опция будет иметь приоритет.)

200_success
источник
1
Это действительно тот ответ, который я искал, но я оставлю ответ slm в качестве выбранного, поскольку он обрабатывает случаи не-GNU l, такие как версии BSD (OS X, Solaris и, конечно, * BSD).
иконоборчество
3

Вы также можете просто использовать (как в DOS):

dir

Это покажет результаты без цвета, вы можете добавить те же аргументы ls, как -l.

esilence
источник
2
alias ls=ls

или же

unalias ls

Это отключает навсегда окраски.

Slyx
источник
3
Конечно, это немного похоже на убийство мухи с помощью дробовика: вы теряете все остальные опции, добавленные вами в lsпсевдонимы, и теряете их на протяжении всего сеанса, а не на одну команду.
иконоборчество
Вот почему я сказал «навсегда» :-)
Slyx
2

Во многих дистрибутивах Linux это включено по умолчанию для пользователей .bashrc.

Отредактируйте ~/.bashrcи удалите строку, которая выглядит следующим образом:

alias ls='ls --color=auto'

Если вы хотите отключить эту функцию для всех новых учетных записей, созданных на этом компьютере в будущем, удалите эту строку из:

/etc/skel/.bashrc 
Джеймс Аандерсон
источник
1

На Centos7 это устанавливается в /etc/profile.d/colorls.sh... последние 3 строки этого скрипта:

alias ll='ls -l --color=auto' 2>/dev/null
alias l.='ls -d .* --color=auto' 2>/dev/null
alias ls='ls --color=auto' 2>/dev/null

Если у вас есть желание и разрешения ... комментирование нежелательной строки должно помочь.

Джеймс Гаврон
источник
Или unalias ls ll lу вас, .bashrcесли у вас нет прав
avsej
0

Выключить цвет: unalias ls

Чтобы включить цвет: псевдоним ls = 'ls --color = auto'

Чтобы временно отключить цвет: \ ls -ltr

Равичандран К
источник
0

Там может быть что-то еще происходит. lsне следует использовать цвета, если он не думает, что он связан с чем-то интерактивным. Он не должен раскрашивать вещи, когда вы переходите на другую программу.

Псевдоним, как правило, плохая идея, потому что вы никогда не сможете избавиться от этой опции, и вы привыкнете к личным настройкам, которые вы, возможно, не сможете перенести с собой на другую машину, с которой вам придется работать. Если вам нужно отключить его, чтобы передать его чему-то другому, используйте переключатель в этой трубе. Но в трубе не должно быть цветов.

Для ls, увидеть , если ваш поддерживает LS_COLORSпеременную окружения. В trapd00r / LS_COLORS показывает, как работает. THT dircolors позволяет вам точно настраивать цвета в зависимости от типа файла. Если вы не установили, LS_COLORSно включили раскраску, lsпроизойдет куча системных вызовов, чтобы выяснить типы файлов и атрибуты, чтобы он мог выяснить, что нужно раскрашивать. Люди, стоящие за Шерлоком, обнаружили, что настройки LS_COLORSмогут избежать всего этого и повысить скорость в 40 раз . Прочитайте их кровавые детали, чтобы увидеть, что они нашли.

Я заставляю все типы файлов использовать цвета по умолчанию:

$ export LS_COLORS='bd=0:ca=0:cd=0:di=0:do=0:ex=0:pi=0:fi=0:ln=0:mh=0:no=0:or=0:ow=0:sg=0:su=0:so=0:st=0:tw=0:'

Вот файл LS_COLORS, который я передал dircolors:

BLK                   0
CAPABILITY            0
CHR                   0
DIR                   0
DOOR                  0
EXEC                  0
FIFO                  0
FILE                  0
LINK                  0
MULTIHARDLINK         0
NORMAL                0
ORPHAN                0
OTHER_WRITABLE        0
SETGID                0
SETUID                0
SOCK                  0
STICKY                0
STICKY_OTHER_WRITABLE 0

Для grepсм , если у вас поддерживает GREP_COLORSили GREP_OPTIONS.

Брайан Д. Фой
источник
Обратите внимание, что это по-прежнему приводит к lsвыходным управляющим последовательностям GNU для выбранных цветов. Сравните вывод ls --color=always | od -aс тем из ls --color=never | od -aэтой установки LS_COLORS.
Кусалананда
Настоящий трюк в том, что ls | od -aон не выбрасывает побеги, а это то, чего я хочу. Эти lsпоследовательности должны генерироваться только при отправке вывода на терминал. Если вы скажете это, хотя, конечно, он собирается это сделать. Так что не делай этого.
Брайан Д. Фой
-1

добавив ответ @ brian-d-foy, в большинстве случаев есть простой раздражающий цвет, который вам нравится менять, например, невидимый синий в каталоге или яркий зеленый цвет «OTHER_WRITABLE», так что давайте используем наш 24- немного дисплея :)

export LS_COLORS='di=04;01;38;5;33:ow=04;01;38;5;33;48;2;60;10;0'

переопределить только цвет каталога и его другой доступный для записи цвет

04: underline;
01: bold/brighter;
38;5;33: redifined-blue;
48;2;60;10;0: dark red background

узнать больше о коде де ANSI

Игги Лейк
источник
1
Речь идет о том, чтобы удалить все цвета из вывода GNU ls, а не о том, как изменить отдельные цвета.
Кусалананда
хорошо, как насчет "выключения одного определенного цвета с помощью 'ls' с помощью: export LS_COLORS = 'ow = 00', чтобы отключить только OTHER_WRITABLE.
Игги Лейк