Критерии соответствия смешивания LS_COLORS, например расширение файла и жесткая ссылка

[118056] Очевидно, что сабля не была спасена или очищена. Перенастройка этого файла решила все проблемы. [118057]
2
16.10.2015, 13:47
1 ответ

Все жестко связанные файлы можно выделить полужирным красным цветом, изменив команду

LS_COLORS="*.tgz=01;31:mh=04" ls --color=auto foo.tgz

на

LS_COLORS="*.tgz=01;31:mh=04;01;31" ls --color=auto foo.tgz

. Часть mh = переменной LS_COLORS ссылается на к файлам с жесткой связью. В исходном коде ls есть таблица, которой нет в документации:

enum indicator_no
  {
    C_LEFT, C_RIGHT, C_END, C_RESET, C_NORM, C_FILE, C_DIR, C_LINK,
    C_FIFO, C_SOCK,
    C_BLK, C_CHR, C_MISSING, C_ORPHAN, C_EXEC, C_DOOR, C_SETUID, C_SETGID,
    C_STICKY, C_OTHER_WRITABLE, C_STICKY_OTHER_WRITABLE, C_CAP, C_MULTIHARDLINK,
    C_CLR_TO_EOL
  };

static const char *const indicator_name[]=
  {
    "lc", "rc", "ec", "rs", "no", "fi", "di", "ln", "pi", "so",
    "bd", "cd", "mi", "or", "ex", "do", "su", "sg", "st",
    "ow", "tw", "ca", "mh", "cl", NULL
  };

, а 04 - это код SGR (выбор графического представления) для подчеркивания. 01 и 31 выделены жирным и красным соответственно. Добавляя их в переменную в части для mh , вы можете раскрашивать жестко связанные файлы точно так же, как другие файлы (или иначе, если вы выберете другие числа).

Однако GNU ls выбирает только одну схему для раскраски каждого файла. Двоеточие : разделяет схемы. После проверки специальных категорий, таких как жесткие ссылки (а также символические ссылки и каталоги), программа только ищет суффиксы, такие как tgz , когда ни одна из этих категорий не подходит. В исходный код , который комментируется

  /* Check the file's suffix only if still classified as C_FILE.  */

, и как только он выбрал схему, он выполняет только эту, , не пытаясь объединить схемы .

0
27.01.2020, 22:52

Теги

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