Пользовательские цвета для ls правильно применяются для некоторых категорий, но игнорируются для других

Программа выполняет это:

close(0);

Дескриптор стандартного входного файла не изменил значение,но он больше не ссылается на описание открытого файла. Он доступен для перераспределения -. Последующие попытки использовать его, скажем, в read()приведут к EBADF, потому что хотя это все еще дескриптор файла, он не является выделенным, ссылающимся на открытое описание файла. Это плохой файловый дескриптор.

Дополнительная литература

  • "close()" . Базовые спецификации Open Group Выпуск 7. IEEE 1003.1 :2008. Open Group. 2018.
  • "read()" . Базовые спецификации Open Group Выпуск 7. IEEE 1003.1 :2008. Open Group. 2018.

1
03.08.2020, 14:47
1 ответ

lsобрабатывает эти настройки как строки для отправки на терминал. Оно не знает, что они означают. Он отправляет строкуESC [ m ;на терминал, и терминал должен интерпретировать эту управляющую последовательность.

Стандартом де-факто для терминальных escape-последовательностей является xterm . В этом документе CSIозначает ESC [, Ps — целое число, а Pm — список целых чисел, разделенных точкой с запятой -, поэтому соответствующая управляющая последовательность указана в разделе CSI Pm m.

Терминал применяет параметры по порядку. Параметр 0 сбрасывает все атрибуты, включая цвет. Таким образом, 91;00эквивалентно 0, используйте 91вместо (или 0;91, если вы хотите сбросить все атрибуты, затем установите цвет переднего плана ). 91;01эквивалентно 01;91, поскольку цвет переднего плана и интенсивность являются независимыми атрибутами.

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

1
18.03.2021, 23:15

Теги

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