Раскрасить жесткие ссылки в выводе ls?

Как мне самому раскрасить жесткие ссылки? Оказывается, на старом Ubuntu 10.04, который у меня есть, это происходит по умолчанию (используются те же .bashrc и .profile), тогда как на более новых Ubuntu 12.04 этого не происходит.

Это вывод в Ubuntu 10.04 (тот, который мне нужен):

Having the colored output for hardlinked files

А это вывод в Ubuntu 12.04: Missing the colored output for hardlinked files

Соответствующим файлом является .vimrc, однако, .viminfo является обычным файлом с количеством ссылок 1, в отличие от жесткой ссылки .vimrc.

Конечно, тот факт, что GNU coreutils использует страницы texinfo вместо man-страниц, не облегчает ситуацию. Я нашел это здесь , но это не относится к делу, которое я ищу.

TL; DR: как добиться раскрашивания жестко связанных (как в: количество ссылок> 1) файлов, как мне нравится в различных версиях Ubuntu.

5
задан 5 February 2013 в 05:11

2 ответа

Сделайте это:

LS_COLORS="mh=44;37" ls -l

И вы можете отредактировать ~/.profile, чтобы изменить LS_COLORS соответственно.

Фон

Эта функция была включена по умолчанию в 2008 году была отключена по умолчанию в 2009 году . Каким-то образом остановка для Ubuntu 10.04 была как раз между этими моментами.

Используя Git-репозиторий coreutils , я вижу, что обязательство по возврату автоматической колоризации выполнялось с версии 7.5:

git tag --contains 0df338f6719ec2bcf1e1dea2d8b12dc66daf8a1e
v7.5
v7.6
[...]

В версиях до 7.1, похоже, поддержка восходящего потока не поддерживается для этого:

git tag --contains 1e48b1fee5fa2ad2d1802771eafbfcddb38a24cb
v7.1
v7.2
[...]

Исходный файл multihardlink.sh , приведите меня к точному значению LS_COLORS, чтобы включить его снова.

Возможно, вы захотите снова открыть LP Bug # 123423 .

0
ответ дан 5 February 2013 в 05:11

Основываясь на ответе gertvdijk, я придумал следующий фрагмент кода, который соответствует моим потребностям:

if [[ -e "/etc/debian_version" ]] && type dircolors > /dev/null 2>&1; then
    command dircolors|command grep -q 'hl=' && export LS_COLORS="ln=01;36:hl=00;36"
    command dircolors|command grep -q 'mh=' && export LS_COLORS="ln=01;36:mh=00;36"
fi

Редактировать: мне действительно пришлось переписать фрагмент (см. Историю изменений).

Оказывается, что ls глотает вывод ошибки, касающийся LS_COLORS при прокачке по трубопроводу. По крайней мере, я не мог grep для этого, ни с 2>&1, ни без. Отсюда и изменения. Мы проверяем, чтобы dircolors был доступен. Если это так, ожидается вывод фрагмента кода оболочки (по умолчанию совместимой с оболочкой Bourne), который содержит значения по умолчанию для различных распознанных типов файлов. Поэтому мы проверяем hl= или mh= соответственно на выходе из dircolors. Таким образом, мы можем определить, что ожидается в ls и export LS_COLORS соответственно. Может быть безопаснее grep для :hl= и :mh= соответственно исключить возможность для расширений файлов, заканчивающихся на hl или mh и соответствующих нашему условию.

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

Конечно, вы можете варьировать состояние верхнего уровня. В настоящее время я настраиваю его только в Debian / Ubuntu, потому что в настоящее время у меня нет времени тестировать его на старых системах RHEL / CentOS.

Примечание: вызовы через command предназначены для работы с потенциальными псевдонимами / функциями с теми же именами, что и инструменты, которые мы пытаемся здесь использовать.

0
ответ дан 5 February 2013 в 05:11

Другие вопросы по тегам:

Похожие вопросы: